#4055. [GESP202503 七级 C++] 第 12 题

[GESP202503 七级 C++] 第 12 题

给定两个无向图 G1G2,判断它们是否同构。图的同构是指两个图的节点可以通过某种重新编号的方式完全匹配,且边的连接关系一致。 为了简化问题,假设图的节点编号从 0n-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;
}

{{ select(1) }}

  • hash += to_string(neighbor);
  • hash += to_string(neighbors);
  • hash += to_string(neighbor) + ",";
  • hash -= to_string(neighbors);