public GridPath getPath(){
		GridPath path = null;
		
		if(!validLocation(start.getX(), start.getY()) || !validLocation(end.getX(), end.getY())){
			return null;
		}
		
		GridLocationAstar startingLocation = new GridLocationAstar(start.getX(), start.getY(), start.isEnd(), 0, -1);
		sortedLocationList.add(startingLocation);
		distanceMap.set(start.getX(), start.getY(), startingLocation.getDoneDistance());
		
		GridLocationAstar location;
		boolean endIsFound = false;
		
		//Find a path...
		while(sortedLocationList.hasNext()){
			location = sortedLocationList.getNext();
			if(visitedMap.get(location.getX(), location.getY()) == visited){
				continue;
			}
			visitedMap.set(location.getX(), location.getY(), visited);
			if(location.isEnd()){
				endIsFound = true;
				break;
			}
			addAdjacent(location);
		}
		
		//Resolve path...
		if(endIsFound){
			path = traceBackThePath();
		}
		
		return path;
	}