Cod sursa(job #2211626)

Utilizator ParketPatrick Josephs Parket Data 11 iunie 2018 10:43:50
Problema BFS - Parcurgere in latime Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.88 kb
#include <stdio.h>
#include <stdbool.h>
#define N 1000001
int vf[N], urm[N], lst[N], d[N], q[N], n, nr, S;
void add(int x, int y){
    nr++;
    vf[nr]=y;
    urm[nr]=lst[x];
    lst[x]=nr;
}
void bfs(int x0){
    int i, x, y, st=0, dr=-1, p;
    for(i=1;i<=n;i++){
        d[i]=-1;
    }
    q[++dr]=x0;
    d[x0]=0;
    while(st<=dr){
        x=q[st++];
        p=lst[x];
        while(p!=0){
            y=vf[p];
            if(d[y]==-1){
                q[++dr]=y;
                d[y]=1+d[x];
            }
            p=urm[p];
        }
    }
}
int main()
{
    FILE *f1, *f2;
    f1=fopen("bfs.in","r");
    f2=fopen("bfs.out","w");
    int m, i, x, y;
    fscanf(f1,"%d%d%d",&n,&m,&S);
    for(i=0;i<m;i++){
        fscanf(f1,"%d%d",&x,&y);
        add(x,y);
    }
    bfs(S);
    for(i=1;i<=n;i++)
        fprintf(f2,"%d ",d[i]);
    return 0;
}