// graph_utils.hpp #pragma once #include #include #include #include class GraphUtils { private: // 定义边类型 using Edge = std::pair; using EdgeMap = std::map; // 静态数据成员 static EdgeMap graphData; // 初始化静态数据 static EdgeMap initGraphData() { EdgeMap data; data["AB"] = {"A", "B"}; data["AB1"] = {"A", "B1"}; data["B1B2"] = {"B1", "B2"}; data["BC"] = {"B", "C"}; data["C2C3"] = {"C2", "C3"}; data["C4C3"] = {"C4", "C3"}; data["CC4"] = {"C", "C4"}; return data; } public: // 静态方法 - 获取所有边 static const EdgeMap &getGraph() { static EdgeMap instance = initGraphData(); return instance; } // 获取边的两个节点 static std::pair getNodes(const std::string &edgeName) { const auto &graph = getGraph(); auto it = graph.find(edgeName); if (it != graph.end()) { return it->second; } return {"", ""}; // 返回空值表示未找到 } // 获取所有边名 static std::vector getEdgeNames() { std::vector names; const auto &graph = getGraph(); names.reserve(graph.size()); for (const auto &pair : graph) { names.push_back(pair.first); } return names; } // 导出为字符串 static std::string toString() { const auto &graph = getGraph(); std::string result = "{\n"; for (const auto &pair : graph) { result += " \"" + pair.first + "\": [\"" + pair.second.first + "\", \"" + pair.second.second + "\"],\n"; } // 移除最后一个逗号 if (!graph.empty()) { result.pop_back(); // 移除换行符 result.pop_back(); // 移除逗号 result += "\n"; } result += "}"; return result; } // 查找包含节点的边 static std::vector findEdgesWithNode(const std::string &node) { std::vector result; const auto &graph = getGraph(); for (const auto &pair : graph) { if (pair.second.first == node || pair.second.second == node) { result.push_back(pair.first); } } return result; } // 显示图形 static void display() { std::cout << "Graph Structure:" << std::endl; std::cout << toString() << std::endl; } };