1: GraphInterface<String> roadMap = new UndirectedGraph<String>(); 2: roadMap.addVertex("Provincetown"); 3: roadMap.addVertex("Truro"); 4: // . . . 5: 6: roadMap.addVertex("Falmouth"); 7: roadMap.addEdge("Provincetown", "Truro", 10); 8: // . . . 9: 10: roadMap.addEdge("Hyannis", "Falmouth", 20); 11: 12: StackInterface<String> bestRoute = new LinkedStack<String>(); 13: double distance = roadMap.getCheapestPath("Truro", "Falmouth", bestRoute); 14: System.out.println("The shortest route from Truro to Falmouth is " + 15: distance + " miles long and " + 16: "passes through the following towns:"); 17: while (!bestRoute.isEmpty()) 18: System.out.println(bestRoute.pop()); 19: // Version 4.0