AC

11  •  1个月前


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

评论:

请先登录,才能进行评论