【題解】ZeroJudge d279: 00280 – Vertex

【題目敘述】https://zerojudge.tw/ShowProblem?problemid=d279
【解題想法】BFS 求最短路徑【筆記

#include <iostream>
#include <queue>
using namespace std;

vector <int> v[105];

int main() {
    int num, n, m;
    while (cin >> num){
        if (num == 0) break;
        for (int i = 0; i < num; i++){
            v[i].clear();
        }
        while (cin >> n){
            if (n == 0) break;
            n--;
            while (cin >> m){
                if (m == 0) break;
                m--;
                v[n].push_back(m);
            }
        }
        cin >> n;
        for (int i = 0; i < n; i++){
            cin >> m;
            m--;
            int a[num];
            for (int i = 0; i < num; i++){
                a[i] = 0;
            }
            int cnt = num;
            queue <int> q;
            q.push(m);
            while (!q.empty()){
                m = q.front();
                q.pop();
                for (int i:v[m]){
                    if (a[i] == 0){
                        a[i] = 1;
                        cnt -= 1;
                        q.push(i);
                    }
                }
            }
            cout << cnt;
            for (int i = 0; i < num; i++){
                if (a[i] == 0) cout << " " << i+1;
            }
            cout << "\n";
        }
    }
}
分享本文 Share with friends