Cod sursa(job #1439640)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 22 mai 2015 21:56:38
Problema BFS - Parcurgere in latime Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.92 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100001
int ind[MAXN],viz[MAXN],next[MAXN],y[MAXN],cod[MAXN];
void BFS(int nod){
     int x,b=0,e=1,x1;
     viz[nod]=1;
     cod[b]=nod;
     do{
        x=ind[cod[b]];
        x1=cod[b++];
        while(x>0){
             if(viz[y[x]]==0){
                 viz[y[x]]=viz[x1]+1;
                 cod[e++]=y[x];
             }
             x=next[x];
        }
     }while(b<e);
}
int main(){
    FILE*fi,*fout;
    int i,j,n,m,s,nr,x,p=1;
    fi=fopen("bfs.in" ,"r");
    fout=fopen("bfs.out" ,"w");
    fscanf(fi,"%d%d%d" ,&n,&m,&s);
    for(i=1;i<=m;i++){
        fscanf(fi,"%d%d" ,&x,&y[p]);
        if(x!=y[i]){
            next[x]=ind[x];
            ind[x]=p;
            p++;
        }
    }
    for(i=1;i<=n;i++)
       if(i==y[next[i]])
          next[i]=0;
    BFS(s);
    for(i=1;i<=n;i++)
        fprintf(fout,"%d " ,viz[i]-1);
    fclose(fi);
    fclose(fout);
    return 0;
}