Cod sursa(job #297452)

Utilizator adrianraduleaRadulea Adrian adrianradulea Data 5 aprilie 2009 13:40:49
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<stdio.h>
FILE *f,*g;
long t[3][1000000],st[100000],ok,viz[100000],nivel[100000],n,m,s,liber,i,x,y,c[100000],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(x!=y)
      { if(!c[x]) { c[x]=liber; t[1][liber]=y; liber++; }
	else { p=c[x]; while(t[2][p]!=0) p=t[2][p]; 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]]; ok=0;
     while(p!=0)
      { if(!viz[t[1][p]]) { u++; viz[t[1][p]]=1; st[u]=t[1][p]; nivel[t[1][p]]=nv; ok=1; }
	p=t[2][p];
      }
     pm++; if(ok) nv++;
   }
  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;
}