测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A28351. 给定两个无向图G1和 G2 ,判断它们是否同构。图的同构是指两个图的节点可以通过某种重新编号的方式完全匹配,且边的连接关系一致。为了简化问题,假设图的节点编号从 0 到 n-1,并且图的边以邻接表的形式给出。下面程序中横线处应该给出的是( )#include <iostream> #include <vector> #include <map> #include <algorithm> usin…

单选题 困难

题目描述

给定两个无向图

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;
}

选项(单选)

上一题 下一题