11 • 8个月前
#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> a;
vector<int> visit;
void bfs(int t, int k) {
queue<int> q;
visit[t] = 1;
q.push(t);
cout << t;
while (!q.empty()) {
int x = q.front();
q.pop();
for (int i = 0; i < k; i++) {
if (!visit[i] && a[x][i]) {
visit[i] = 1;
q.push(i);
cout << " " << i;
}
}
}
}
int main() {
int n, k, m, t;
cin >> n;
while (n--) {
cin >> k >> m >> t;
a.assign(k, vector<int>(k, 0));
visit.assign(k, 0);
int u, v;
for (int i = 0; i < m; i++) {
cin >> u >> v;
a[u][v] = a[v][u] = 1;
}
// 开始第一个区块的 BFS
bfs(t, k);
// 检查并处理其他未访问的区块
for (int i = 0; i < k; i++) {
if (!visit[i]) {
cout << " ";
bfs(i, k);
}
}
cout << endl;
}
return 0;
}
评论:
请先登录,才能进行评论