/* Given a directed graph and the ID v of a vertex in that graph ** (the so-called "source" vertex), returns an array indicating, ** for each vertex w in the graph, the distance from v to w. */ public static int[] distancesFrom( DiGraph graph, int v ) { final int N = graph.numVertices(); int[] dist = new int[N]; for (int i = 0; i != N; i++) { dist[i] = -1; } dist[v] = 0; Queue<Integer> q = new QueueViaX<Integer>(); q.enqueue(v); // insert source vertex onto queue while (!q.isEmpty()) { int x = q.dequeue(); // grab a vertex x off the queue // now explore from vertex x for each y such that graph.hasEdge(x,y) { if (dist[y] == -1) { q.enqueue(y); // y is newly discovered! dist[y] = dist[x] + 1; // distance to y from v } // is one more than from } // v to x } return dist; } |