Anda di halaman 1dari 1

public 2 3 4 5 om "s" 6 7 lly 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 { 43 44 45 46 47 48 49 50 51 52 53 }

class Dijkstra { // Dijkstra's algorithm to find shortest path from s to all other nodes public static int [] dijkstra (WeightedGraph G, int s) { final int [] dist = new int [G.size()]; // shortest known distance fr final int [] pred = new int [G.size()]; // preceeding node in path final boolean [] visited = new boolean [G.size()]; // all false initia for (int i=0; i<dist.length; i++) { dist[i] = Integer.MAX_VALUE; } dist[s] = 0; for (int i=0; i<dist.length; i++) { final int next = minVertex (dist, visited); visited[next] = true; // The shortest path to next is dist[next] and via pred[next]. final int [] n = G.neighbors (next); for (int j=0; j<n.length; j++) { final int v = n[j]; final int d = dist[next] + G.getWeight(next,v); if (dist[v] > d) { dist[v] = d; pred[v] = next; } } } return pred; // (ignore pred[s]==0!) } private static int minVertex (int [] dist, boolean [] v) { int x = Integer.MAX_VALUE; int y = -1; // graph not connected, or no unvisited vertices for (int i=0; i<dist.length; i++) { if (!v[i] && dist[i]<x) {y=i; x=dist[i];} } return y; } public static void printPath (WeightedGraph G, int [] pred, int s, int e) final java.util.ArrayList path = new java.util.ArrayList(); int x = e; while (x!=s) { path.add (0, G.getLabel(x)); x = pred[x]; } path.add (0, G.getLabel(s)); System.out.println (path); }

Anda mungkin juga menyukai