protected: // overridden functions virtual void startVisit(const Vertex& v) { } // first visit to v virtual void finishVisit(const Vertex& v) { } // finished with v // discover edge e virtual void traverseDiscovery(const Edge& e, const Vertex& from) { } // back edge e virtual void traverseBack(const Edge& e, const Vertex& from) { } virtual bool isDone() const { return false; } // done early? protected: // marking utilities void markVisited(const Vertex& v) { v.set("status", visited); } void markVisited(const Edge& e) { e.set("status", visited); } void markUnvisited(const Vertex& v) { v.set("status", unvisited); } void markUnvisited(const Edge& e) { e.set("status", unvisited); } bool isVisited(const Vertex& v) { return v.get("status") == visited; } bool isVisited(const Edge& e) { return e.get("status") == visited; }