Cod sursa(job #2915947)

Utilizator db_123Balaban David db_123 Data 26 iulie 2022 11:58:03
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

ifstream cin("bfs.in");
ofstream cout("bfs.out");

int n,m,s;
vector<vector<int>> ma;

void read() {
    cin>>n>>m>>s;
    ma.resize(n+1);
    int a,b;
    for(int i=1;i<=m;i++) {
        cin>>a>>b;
        if(a!=b) {
            ma[a].push_back(b);
        }
    }
}

void solve() {
    queue<pair<int,int>> q;
    pair<int,int> nr;
    vector<bool> visited(n+1);
    bool ok;
    for(int i=1;i<=n;i++) {
        fill(visited.begin(),visited.end(),0);
        visited[s]=1;
        while(!q.empty()) {
            q.pop();
        }
        if(s==i) {
            cout<<"0 ";
            continue;
        }
        q.push({s,0});
        ok=0;
        while(!q.empty()) {
            nr=q.front();
            q.pop();
            if(nr.first==i) {
                cout<<nr.second<<" ";
                ok=1;
                break;
            }
            for(auto j:ma[nr.first]) {
                if(visited[j]==0) {
                    q.push({j,nr.second+1});
                    visited[j]=1;
                }
            } 
        }
        if(!ok) {
            cout<<"-1 ";
        }
    }
}

int main() {
 
    read();
    solve();   
    return 0;
}