#include using namespace std; template class BfsVisitor { public: BfsVisitor() { dist = std::map(); parent = std::map(); current_vert = (Vertex)(-1); } void ExamineVertex(const Vertex &vertex) { current_vert = vertex; } void DiscoverVertex(const Vertex &vertex) { if (current_vert == (Vertex)(-1)) { dist[vertex] = 0; parent[vertex] = vertex; } else { dist[vertex] = dist[current_vert] + 1; parent[vertex] = current_vert; } } size_t DistanceTo(const Vertex &target) const { return dist.at(target); } Vertex Parent(const Vertex &vertex) const { return parent.at(vertex); } private: static std::map dist; static std::map parent; static Vertex current_vert; }; template map BfsVisitor::dist = map(); template map BfsVisitor::parent = map(); template T BfsVisitor::current_vert = T();