DirectedDFS.java

package cn.denghanxi.s42;

public class DirectedDFS {
    private boolean[] marked;

    public DirectedDFS(Digraph digraph, int s) {
        marked = new boolean[digraph.v()];
        dfs(digraph, s);
    }

    public DirectedDFS(Digraph digraph, Iterable<Integer> sources) {
        marked = new boolean[digraph.v()];
        for (int s : sources) {
            if (!marked[s]) dfs(digraph, s);
        }
    }

    private void dfs(Digraph digraph, int v) {
        marked[v] = true;
        for (int w : digraph.adj(v))
            if (!marked[w]) dfs(digraph, w);
    }

    public boolean marked(int v) {
        return marked[v];
    }
}