public static List<String> depthFirstSearch(Graph graph, String startName, String goalName)
	{				
		HashMap<String,Vertex> vertices = graph.getVertices(); // get all the vertices

		if(!vertices.containsKey(startName) || !vertices.containsKey(goalName))
			throw new UnsupportedOperationException("The graph does not contain either the starting vertex or the goal vertex");

		List<String> list = new LinkedList<String>(); // temp to store cameFroms

		//Recurive Step
		dfsRecursive(graph, vertices, startName, goalName);

		//Final Step:
		if(vertices.get(goalName).getCameFrom() == null)
			return list;

		list.add(vertices.get(goalName).getName());//add the goal to cameFrom
		Vertex temp = vertices.get(goalName);//set a temp Vertex as the goal
		while(!temp.equals(vertices.get(startName))){//While the temp is not equal to the start
			list.add(0, temp.getCameFrom().getName());//add them in reverse order to get the travel path
			temp = temp.getCameFrom();//switch the temp pointer
		}

		return list;
	}