Backjun 11403パスC++の検索


-質問


質問の表示

BFS資源構造の整理
BFSを整理して、簡単な図論問題を解いてみましょう.

-問題を解く

  • の複数の問題において、Breadth First Searchを実施する場合、形状はほぼ同じである.アクセスするかどうかを決定するアクセス配列、参照するノードを格納するqueue、問題ごとにグラフィック範囲、ウェイトなどの必要な要素を追加すればよい.今日解決すべき問題は重みのないグラフであり,bfsを利用できる最も基本的な問題であると考えられる.
  • -コード

    #include <iostream>
    #include <queue>
    #include <vector>
    using namespace std;
    
    vector<int>* graph;
    int N, input;
    
    void bfs(int start){
        queue<int> que;
        que.push(start);
        int visited[101] = {0, };
        while(!que.empty()){
            int current = que.front();
            que.pop();
            for(int i = 0; i < graph[current].size(); i++){
                int next = graph[current][i];
                if(!visited[next]){
                    que.push(next);
                    visited[next] = 1;
                }
            }
        }
        for(int i = 1; i <= N; i++){
            cout << visited[i] << " ";
        }
        cout << endl;
    }
    
    int main() {
        ios_base::sync_with_stdio(0);cin.tie(0);
    
        cin >> N;
    
        graph = new vector<int>[N+1];
        for(int i = 1; i <= N; i++){
            for(int j = 1; j <= N; j++){
                cin >> input;
                if(input){
                    graph[i].push_back(j);
                }
            }
        }
    
        for(int i = 1; i <= N; i++){
            bfs(i);
        }
    
        return 0;
    }