Cod sursa(job #3198164)

Utilizator stefanscdStefan stefanscd Data 28 ianuarie 2024 14:14:52
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
int n,m,p;
vector<vector<int> > G;
vector<int> dist,viz;

void BFS(int nod){
    queue<int> cd;
    viz[nod]=1;
    cd.push(nod);
    while(!cd.empty()){
        nod=cd.front();
        cd.pop();
        for(auto t:G[nod])
            if(viz[t]==0)
                dist[t]=dist[nod]+1;
        for(auto t:G[nod])
            if(viz[t]==0){
                viz[t]=1;
                cd.push(t);
            }
    }
}

int main()
{
    fin>>n>>m>>p;
    G=vector<vector<int> > (m+1);
    viz=dist=vector<int> (n+1);
    for(int i=1;i<=m;++i){
        int x,y;
        fin>>x>>y;
        G[x].push_back(y);
    }
    BFS(p);
    for(int i=1;i<=n;++i)
        if(dist[i]==0 && i==p)
            fout<<0<<" ";
        else if(dist[i]==0 && viz[i]==0)
            fout<<-1<<" ";
        else
            fout<<dist[i]<<" ";
    return 0;
}