private List<Path> depthFirstSearch(String start, String end, List<String> pathSoFar, List<Path> paths, Collection<Road> city) {
		String currentNode = pathSoFar.get(pathSoFar.size() - 1);
		for (Road r : city) {
			String nextNode = null; // Declare this in here so it nulls every time
			// currentNode is Neighborhood1
			if (r.getNeighborhood1().equals(currentNode)) {
				nextNode = r.getNeighborhood2();
			}
			// currentNode is Neighborhood2
			else if (r.getNeighborhood2().equals(currentNode)) {
				nextNode = r.getNeighborhood1();
			}
			
			// Common code for nextNode
			if (nextNode != null) {
				// Prevents loops
				if (!pathSoFar.contains(nextNode)) {
					// Safe copy of the pathSoFar variable that we can touch
					List<String> myPathSoFar = new ArrayList<String>();
					for (String s : pathSoFar) {
						myPathSoFar.add(s);
					}	
					// Add to the path
					myPathSoFar.add(nextNode);
					if (nextNode.equals(end)) {	// This path is complete
						paths.add(new Path(myPathSoFar));
					}
					else {	// Recurse
						paths = depthFirstSearch(start, end, myPathSoFar, paths, city);
					}
				}
			}
		}
		
		return paths;
	}