Cod sursa(job #448591)

Utilizator mihaionlyMihai Jiplea mihaionly Data 4 mai 2010 08:43:59
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <cstdio>
using namespace std;
FILE *f=fopen("bfs.in","r");
FILE *g=fopen("bfs.out","w");
#define nmax 100005
struct graf
 {
 int x;
 graf *urm;
 };
graf *G[nmax];
bool viz[nmax],vizq[nmax];
int N,S;
int L[nmax];
int Q[5*nmax],k;
void add(graf *&g,int x)
 {
 graf *p=new graf;
 p->x=x;
 p->urm=g;
 g=p;
 }
void bfs()
 {
 Q[++k]=S;
 int i,x;
 viz[S]=true;
 L[S]=0;
 for(i=1;i<=k;i++)
  {
  x=Q[i];
  for(graf *g=G[x];g!=NULL;g=g->urm)
   {
   if(!viz[g->x])
    {
    L[g->x]=L[x]+1;
	viz[g->x]=true;
	Q[++k]=g->x;
    }
   }
  }
 }
void read()
 {
 int M,i,x,y;
 fscanf(f,"%d %d %d",&N,&M,&S);
 for(i=1;i<=M;i++)
  {
  fscanf(f,"%d %d",&x,&y);
  add(G[x],y);
  }
 for(i=1;i<=N;i++) L[i]=-1;
 }
int main()
 {
 read();
 bfs();
 for(int i=1;i<=N;i++)
  fprintf(g,"%d ",L[i]);
 return 0;
 }