public List<Place> findPath(Location sourceLoc, Location destinationLoc,
			List<Place> lstplaces, float time, float budget) {
		AssignTimeAndCost(lstplaces);
		CreateGraph(sourceLoc, destinationLoc, lstplaces);
		Vertex v=null;
		while (!vertexQueue.isEmpty()) {
			v = vertexQueue.poll();
			for(Edge edge:v.getAdjacencies()){
				if(v.getRating()==0)
					continue;
				//Iterating on backward edges only
				if(edge.isBackwardEdge()){
					//If the backward node is source then handle specifically
					if(edge.getTarget().equals(sourceVertex)){
						PathParams pathObj=new PathParams();
						pathObj.setMaxEntertainment(v.getRating());
						pathObj.setMaxCost(v.getCostOfVertex());
						pathObj.lstPath.add(edge.getTarget());
						Map.Entry<Double,PathParams> keyValuePair=new AbstractMap.SimpleEntry<Double,PathParams>(edge.getWeight()+v.getTimeToSpend(),pathObj);
						performComparisionSteps(time, budget, v, keyValuePair);
					}
					//If the backward node is not source
					else{
						Map<Double,PathParams> previousMapPath=edge.getTarget().getMapPath();
						for(Entry previousEntry:previousMapPath.entrySet()){
							PathParams pathObj=new PathParams();
							pathObj.setMaxEntertainment(v.getRating()+((PathParams)previousEntry.getValue()).getMaxEntertainment());
							pathObj.setMaxCost(v.getCostOfVertex()+ ((PathParams)previousEntry.getValue()).getMaxCost());
							pathObj.lstPath.addAll(((PathParams)previousEntry.getValue()).lstPath);
							pathObj.lstPath.add(edge.getTarget());
							Map.Entry<Double,PathParams> keyValuePair=new AbstractMap.SimpleEntry<Double,PathParams>(edge.getWeight()+(Double)previousEntry.getKey()+v.getTimeToSpend(),pathObj);
							performComparisionSteps(time, budget, v, keyValuePair);
						}
					}
				}
			}
		}
		double maximumEntertainment=0;
	
		List<Vertex> finalPathVertex=null;
		Entry destinationEntry=destinationVertex.getMapPath().lastEntry();

		double otherEntertainment=((PathParams)destinationEntry.getValue()).getMaxEntertainment();

		System.out.println("Key is:"+destinationEntry.getKey()+" and ent is:"+((PathParams)destinationEntry.getValue()).getMaxEntertainment()+" and path is:"+((PathParams)destinationEntry.getValue()).lstPath);

		if(otherEntertainment>maximumEntertainment){
			maximumEntertainment=otherEntertainment;
			finalPathVertex=((PathParams)destinationEntry.getValue()).lstPath;
		}

		
		List<Place> lstPathPlaces=new ArrayList<Place>();
		for(Vertex vertex:finalPathVertex){
			lstPathPlaces.add(createPlace(vertex));
		}
		
		lstPathPlaces.add(createPlace(destinationVertex));
		return lstPathPlaces;
	}