#pragma once #include template class BfsVisitor { public: BfsVisitor() { is_start = true; parent.clear(); distance.clear(); } void ExamineVertex(const Vertex& vertex) { if (is_start) { is_start = false; parent[vertex] = vertex; distance[vertex] = 0; } current_v = vertex; } void DiscoverVertex(const Vertex& vertex) { parent[vertex] = current_v; distance[vertex] = distance[current_v] + 1; } size_t DistanceTo(const Vertex& target) const { return distance[target]; } Vertex Parent(const Vertex& vertex) const { return parent[vertex]; } private: static bool is_start; static Vertex current_v; static std::map parent; static std::map distance; };