给定两个无向图
G1和 G2 ,判断它们是否同构。图的同构是指两个图的节点可以通过某种重新编号的方式完全匹配,且边的连接关
系一致。
为了简化问题,假设图的节点编号从 0 到 n-1,并且图的边以邻接表的形式给出。下面程序中横线处应该给出的是
()
#include <iostream> #include <vector> #include <map> #include <algorithm> using namespace std; string graphHash(vector<vector<int>>& graph) { vector<string> nodeHashes(graph.size()); for (int i = 0; i < graph.size(); i++) { vector<int> neighbors = graph[i]; sort(neighbors.begin(), neighbors.end()); string hash; for (int neighbor : neighbors) { —————————————————————————— } nodeHashes[i] = hash; } sort(nodeHashes.begin(), nodeHashes.end()); string finalHash; for (string h : nodeHashes) { finalHash += h + ";"; } return finalHash; } int main() { int n; cin >> n; vector<vector<int>> G1(n); for (int i = 0; i < n; i++) { int k; while (cin >> k) { G1[i].push_back(k); if (cin.get() == '\n') break; } } vector<vector<int>> G2(n); for (int i = 0; i < n; i++) { int k; while (cin >> k) { G2[i].push_back(k); if (cin.get() == '\n') break; } } string hash1 = graphHash(G1); string hash2 = graphHash(G2); if (hash1 == hash2) { cout << "YES" << endl; } else { cout << "NO" << endl; } return 0; }