Cod sursa(job #2007019)

Utilizator Andrei2000Andrei Mihailescu Andrei2000 Data 1 august 2017 17:28:09
Problema BFS - Parcurgere in latime Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <bits/stdc++.h>
#define Nmax 102
using namespace std;

ifstream fin ("bfs.in");
ofstream fout ("bfs.out");

vector<int> G[Nmax];
queue<int> Q;
int N,M,a,b,V[Nmax],s;

void BFS(int n){
    for(int i=1;i<=N;++i)V[i]=INT_MAX;
    V[n]=0;
    Q.push(n);
    while(!Q.empty()){
        int x=Q.front();
        Q.pop();
        for(vector<int>::iterator it=G[x].begin();it!=G[x].end();++it)
            if(V[*it]==INT_MAX){
                Q.push(*it);
                V[*it]=V[x]+1;
            }
    }
}

int main()
{
    fin>>N>>M>>s;
    for(int i=1;i<=M;++i){
        fin>>a>>b;
        G[a].push_back(b);
    }
    /*for(int i=1;i<=N;++i){
        cout<<"Adjacent nodes to #"<<i<<" are: ";
        for(vector<int> :: iterator it=G[i].begin();it!=G[i].end();++it)
            cout<<*it<<" ";
        cout<<"\n";
    }
    for(int i=1;i<=N;++i){
        BFS(i);
        cout<<"\nDistances to other nodes from node #"<<i<<" are:\n";
        for(int j=1;j<=N;++j)cout<<"#"<<j<<":"<<V[j]<<'\n';
    }*/
    BFS(s);
    for(int i=1;i<=N;++i)
        fout<<((V[i]!=INT_MAX)?V[i]:-1)<<' ';
    fout<<endl;
    return 0;
}