diff options
Diffstat (limited to 'Algorithms/Part-II/1-WordNet/SpecializedBFS.java')
-rw-r--r-- | Algorithms/Part-II/1-WordNet/SpecializedBFS.java | 150 |
1 files changed, 0 insertions, 150 deletions
diff --git a/Algorithms/Part-II/1-WordNet/SpecializedBFS.java b/Algorithms/Part-II/1-WordNet/SpecializedBFS.java deleted file mode 100644 index 5b4a635..0000000 --- a/Algorithms/Part-II/1-WordNet/SpecializedBFS.java +++ /dev/null @@ -1,150 +0,0 @@ -/* vim: set expandtab tabstop=4 shiftwidth=4 : */ - -public class SpecializedBFS -{ - private static final int MAXINT = Integer.MAX_VALUE; - - private boolean[] marked; - private int[] edgeTo; - private int[] distTo; - - public SpecializedBFS(Digraph G, int s, ResizingArrayQueue<Integer> c) - { - init(G); - Queue<Integer> q = new Queue<Integer>(); - marked[s] = true; - distTo[s] = 0; - q.enqueue(s); - if (c != null) c.enqueue(s); - bfs(G, q, c); - } - - public SpecializedBFS(Digraph G, Iterable<Integer> ss, - ResizingArrayQueue<Integer> c) - { - init(G); - Queue<Integer> q = new Queue<Integer>(); - for (int s : ss) { - marked[s] = true; - distTo[s] = 0; - q.enqueue(s); - if (c != null) c.enqueue(s); - } - bfs(G, q, c); - } - - private void init(Digraph g) - { - marked = new boolean[g.V()]; - edgeTo = new int[g.V()]; - distTo = new int[g.V()]; - for (int v = 0; v < g.V(); v++) - distTo[v] = MAXINT; - } - - public int distTo(int v) - { - return distTo[v]; - } - - public boolean hasPathTo(int v) - { - return marked[v]; - } - - private void bfs(Digraph G, Queue<Integer> q, ResizingArrayQueue<Integer> c) - { - while (!q.isEmpty()) { - int v = q.dequeue(); - for (int w : G.adj(v)) { - if (!marked[w]) { - edgeTo[w] = v; - distTo[w] = distTo[v] + 1; - marked[w] = true; - q.enqueue(w); - if (c != null) c.enqueue(w); - } - } - } - } - - // change this to an iterator if efficiency is needed - public Iterable<Integer> pathTo(int v) - { - if (!hasPathTo(v)) return null; - - Stack<Integer> path = new Stack<Integer>(); - int x; - for (x = v; distTo[x] != 0; x = edgeTo[x]) - path.push(x); - path.push(x); - - return path; - } - - public int pathToCount(int v) - { - if (!hasPathTo(v)) return MAXINT; - - int count = 0; - for (int x = v; distTo[x] != 0; x = edgeTo[x]) - count++; - - return count; - } - - public static void main(String[] args) - { - In in = new In("./data/digraph3.txt"); - Digraph G = new Digraph(in); - StdOut.println(G); - - int s = 7; - ResizingArrayQueue<Integer> components = new ResizingArrayQueue<Integer>(); - SpecializedBFS bfs = new SpecializedBFS(G, s, components); - - for (int v = 0; v < G.V(); v++) { - if (bfs.hasPathTo(v)) { - StdOut.printf("%2d -> %2d: [%d] ", s, v, bfs.distTo(v)); - for (int x : bfs.pathTo(v)) { - if (x == s) StdOut.print(x); - else StdOut.print("->" + x); - } - StdOut.println(); - } else { - StdOut.printf("%2d -> %2d: [-]\n", s, v); - } - } - StdOut.printf("components : "); - for (int c : components) { - if (c == s) StdOut.print(c); - else StdOut.print("->" + c); - } - StdOut.print("\n"); - StdOut.printf("pathToCount(%d) : %2d\n", 4, bfs.pathToCount(4)); - StdOut.printf("pathToCount(%d) : %2d\n", 9, bfs.pathToCount(9)); - - int s2 = 11; - SpecializedBFS bfs2 = new SpecializedBFS(G, s2, null); - - for (int v = 0; v < G.V(); v++) { - if (bfs2.hasPathTo(v)) { - StdOut.printf("%2d -> %2d: [%d] ", s2, v, bfs2.distTo(v)); - for (int x : bfs2.pathTo(v)) { - if (x == s2) StdOut.print(x); - else StdOut.print("->" + x); - } - StdOut.println(); - } else { - StdOut.printf("%2d -> %2d: [-]\n", s2, v); - } - } - - StdOut.printf("intersection : "); - for (int c : components) { - if (bfs2.hasPathTo(c)) - StdOut.print(c+" "); - } - StdOut.print("\n"); - } -} |