Code Fragment: DFS2



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; }