Cod sursa(job #1759438)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 19 septembrie 2016 10:15:27
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <stdio.h>
#define maxn 100005
#define maxm 1000005
#define lim 2000000000
int d[maxn],ind[maxn],lista[maxn];
struct muchie{int x,y,next;};
muchie v[maxm];
int main(){
    FILE *fin,*fout;
    fin=fopen("bfs.in","r");
    fout=fopen("bfs.out","w");
    int i,j,k,n,m,s,st,dr;
    fscanf(fin,"%d%d%d",&n,&m,&s);
    for(i=1;i<=n;i++)
        d[i]=lim;
    for(i=1;i<=m;i++){
        fscanf(fin,"%d%d",&v[i].x,&v[i].y);
        if(ind[v[i].x]==0)
            ind[v[i].x]=i;
        else{
            v[i].next=ind[v[i].x];
            ind[v[i].x]=i;
        }
    }
    st=1;
    dr=1;
    lista[st]=s;
    d[s]=0;
    while(st<=dr){
        k=ind[lista[st]];
        while(k!=0){
            if(d[v[k].y]==lim){
                d[v[k].y]=d[lista[st]]+1;
                dr++;
                lista[dr]=v[k].y;
            }
            k=v[k].next;
        }
        st++;
    }
    for(i=1;i<=n;i++){
        if(d[i]==lim)
            fprintf(fout,"-1 ");
        else
            fprintf(fout,"%d ",d[i]);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}