Cod sursa(job #1828961)

Utilizator alexionpopescuPopescu Ion Alexandru alexionpopescu Data 14 decembrie 2016 09:28:02
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
struct nod{
    int inf;
    nod *urm;
};
nod *l[1000001];
int n,m,r,d[100001],u,c[100001];
bool v[100001];
void cit(){
    int i,j,k;
    nod *q;
    fin>>n>>m>>r;
    for(i=1;i<=n;i++)
        l[i]=0;
    for(k=1;k<=m;k++){
        fin>>i>>j;
        q=new nod;
        q->inf=j;
        q->urm=l[i];
        l[i]=q;
        /*q=new nod;
        q->inf=i;
        q->urm=l[j];
        l[j]=q;*/
    }
    fin.close();
}
void bfs(int k){
    int i,p;
    nod *q;
    p=u=1;
    c[p]=k;v[r]=1;
    while(p<=u){
        k=c[p];
        q=l[k];
        while(q){
            i=q->inf;
            if(v[i]==0)
                v[i]=1,d[i]=d[k]+1,c[++u]=i;
            q=q->urm;
        }
        p++;
    }
}
int main(){
    cit();
    bfs(r);
    int i;
    for(i=1;i<=n;i++)
        if(i==r)
            fout<<0<<" ";
        else{
            if(d[i]==0)
                fout<<-1<<" ";
            else
                fout<<d[i]<<" ";
        }
    fout.close();
    return 0;
}