#include #include #include #include template class DataClass { public: std::map* distance = new std::map; std::map* parents = new std::map;; Vertex current_vertex = -1; }; template class BfsVisitor { public: void ExamineVertex(const Vertex& vertex) { data_class_->current_vertex = vertex; } void DiscoverVertex(const Vertex& vertex) { if (data_class_->current_vertex == -1) { data_class_->parents->insert(std::make_pair(vertex, vertex)); data_class_->distance->insert(std::make_pair(vertex, 0)); } else { data_class_->parents->insert(std::make_pair (vertex, data_class_->current_vertex)); data_class_->distance->insert(std::make_pair (vertex, data_class_->distance->at (data_class_->current_vertex) + 1)); } } size_t DistanceTo(const Vertex& target) const { return data_class_->distance->at(target); } Vertex Parent(const Vertex& vertex) const { return data_class_->parents->at(vertex); } private: DataClass* data_class_ = new DataClass(); };