Cod sursa(job #1198573)

Utilizator andi12Draghici Andrei andi12 Data 16 iunie 2014 10:50:42
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <cstdio>
int v[100001];
int c[100001];
int lst[2000005];
int urm[2000005];
int vf[2000005];
int nr;
int n;
FILE *in,*out;
void ad(int x,int y) {
    nr++;
    vf[nr]=y;
    urm[nr]=lst[x];
    lst[x]=nr;
}
void bfs(int x) {
    int p=1,u=1,i,poz,a=0,cu;
    v[x] = 1;
    c[p]=x;
    while(p<=u) {
        x = c[p++];//scot x din coada
        poz=lst[x];
        while(poz!=0) {
            if(v[vf[poz]]==0) {
                u++;
                c[u]=vf[poz];
                v[vf[poz]] = 1 + v[x];
            }
            poz=urm[poz];
        }
    }
}
int main() {
    in=fopen("bfs.in","r");
    out=fopen("bfs.out","w");
    int m,i,x,y,s;
    fscanf(in,"%d%d%d",&n,&m,&s);
    nr=0;
    for(i=1; i<=m; i++) {
        fscanf(in,"%d%d",&x,&y);
        if(x!=y)
            ad(x,y);
    }
    bfs(s);
    for(i=1; i<=n; i++) {
        if(v[i]>=1 && i!=s)
            fprintf(out,"%d ",v[i]-1);
        if(i==s)
            fprintf(out,"0 ");
        if(v[i]==0 && i!=s)
            fprintf(out,"-1 ");

    }
    return 0;
}