import java.util.Iterator; public class DecreasingPath { public static void main(String[] args) { WeightedGraph G = makeExampleGraph(); int startNode = 11; boolean done = false; int currentNode = startNode; double lastWeight = Double.POSITIVE_INFINITY; while(!done) { System.out.printf("I am now at %d\n", currentNode); double maxValidEdgeWeight = Double.NEGATIVE_INFINITY; int maxValidNeighbor = -1; for(Integer neighbor : G.getNeighbors(currentNode)) { double w = G.getWeight(currentNode, neighbor); if(w > maxValidEdgeWeight && w < lastWeight) { maxValidEdgeWeight = w; maxValidNeighbor = neighbor; } } if(maxValidEdgeWeight == Double.NEGATIVE_INFINITY) { done = true; } else { System.out.printf("Taking edge {%d,%d} with weight %f\n", currentNode, maxValidNeighbor, maxValidEdgeWeight); currentNode = maxValidNeighbor; lastWeight = maxValidEdgeWeight; } } } public static WeightedGraph makeExampleGraph() { WeightedGraph G = new MysteryWeightedGraphImplementation(false, 13); G.addEdge(11, 0, 8.0); G.addEdge(11, 12, 9.9); G.addEdge(0, 1, 3.6); G.addEdge(12, 1, 7.0); G.addEdge(0, 2, 2.5); G.addEdge(1, 3, 4.8); G.addEdge(1, 4, 9.2); G.addEdge(4, 5, 1.5); G.addEdge(3, 5, 1.3); G.addEdge(2, 3, 1.7); G.addEdge(2, 6, 0.1); G.addEdge(6, 7, 7.9); G.addEdge(5, 6, 3.5); G.addEdge(2, 8, 5.5); G.addEdge(5, 10, 5.0); G.addEdge(10, 9, 2.0); G.addEdge(7, 9, 0.5); G.addEdge(7, 10, 6.6); G.addEdge(6, 10, 9.9); G.addEdge(7, 8, 8.4); return G; } }