/** Auxiliary methods for specializing a generic DFS */ protected void initResult() {} // Initializes result (called first) protected void startVisit(Vertex v) {} // Called when we first visit v protected void finishVisit(Vertex v) {} // Called when we finish with v protected void traverseDiscovery(Edge e, Vertex from) {} // Discovery edge protected void traverseBack(Edge e, Vertex from) {} // Back edge protected boolean isDone() { return false; } // Is DFS done early? protected Object result() { return new Object(); } // The result of the DFS