Cod sursa(job #297578)

Utilizator adrianraduleaRadulea Adrian adrianradulea Data 5 aprilie 2009 14:40:50
Problema BFS - Parcurgere in latime Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<stdio.h>
FILE *f,*g;
long t[3][1000001],st[100001],ok,fin[100001],viz[100001],nivel[100001],n,m,s,liber,i,x,y,c[100001],p,pm,u,nv;
int main()
{ f=fopen("bfs.in","r"); g=fopen("bfs.out","w");
  fscanf(f,"%ld%ld%ld",&n,&m,&s);
  liber=1;
  for(i=1;i<=m;i++)
   { fscanf(f,"%ld%ld",&x,&y);
     if(c[x]==0) { c[x]=liber; t[1][liber]=y; fin[x]=liber; liber++; }
      else { p=fin[x]; t[2][p]=liber; t[1][liber]=y; liber++; }
   }
  pm=1; u=1; st[1]=s; nivel[s]=0; nv=1; viz[s]=1;
  while(pm<=u)
   { p=c[st[pm]];
     while(p!=0)
      { if(!viz[t[1][p]]) { u++; viz[t[1][p]]=1; st[u]=t[1][p]; nivel[t[1][p]]=nivel[st[pm]]+1; }
	p=t[2][p];
      }
     pm++;
   }
  for(i=1;i<=n;i++)
   if(nivel[i]!=0) fprintf(g,"%ld ",nivel[i]);
    else if(!viz[i]) fprintf(g,"-1 ");
     else fprintf(g,"0 ");
  fclose(g);
  return 0;
}