public LinkedList<Node> astar(int startnode, int endnode)
	{
		int id, newDis;
		int maxValue = (int) (Integer.MAX_VALUE - Math.sqrt(World.width * World.width + World.height * World.height));
		for(int i = 0; i < nodes.size(); i++)
		{
			int absx = nodes.get(i).getX() - nodes.get(endnode).getX();
			int absy = nodes.get(i).getY() - nodes.get(endnode).getY();
			nodes.get(i).setHeuristic((int) Math.sqrt(absx * absx + absy * absy));
			nodes.get(i).setVisited(false);
			nodes.get(i).setRange(maxValue);
		}
		
		nodes.get(startnode).setRange(0);
		outer : for(int i = 0; i < nodes.size(); i++)
		{
			id = getNextNode();
			if(id == -1) break;
			nodes.get(i).setVisited(true);
			for(int ab = 0; ab < nodes.size(); ab++)
			{
				if(nodes.get(ab).isVisited() && matrix[ab][i] > 0)
				{
					newDis = nodes.get(id).getRange() + matrix[ab][i];
					if(newDis < nodes.get(ab).getRange())
					{
						nodes.get(ab).setRange(newDis);
						nodes.get(ab).setCmgfrom(id);
						
						if(ab == endnode) break outer;
					}
				}
			}
		}
		
		LinkedList<Node> way = new LinkedList<Node>();
		id = endnode;
		way.add(nodes.get(id));
		while(id != startnode)
		{
			id = nodes.get(id).getCmgfrom();
			way.add(nodes.get(id));
		}
		return way;
	}