public class Reachability { private int numNodes; private int[][] arcs; public Reachability(int numNodes) { this.numNodes = numNodes; arcs = new int[numNodes][]; } public int getNumNodes() { return numNodes; } public int getNumArcs(int node) { return arcs[node].length; } public void setNumArcs(int node, int numArcs) { arcs[node] = new int[numArcs]; } public void setArcs(int node, int arc, int target) { arcs[node][arc] = target; } public boolean[] calcReachability(int node) { boolean[] reachable = new boolean[numNodes]; // the reachable nodes reachable[node] = true; // initially just me calcReachabilityHelper(node, reachable); return reachable; } private void calcReachabilityHelper(int node, boolean[] reachable) { for (int i=0; i