Cod sursa(job #412484)

Utilizator cosgbCosmin cosgb Data 5 martie 2010 19:10:48
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
# include <stdio.h>
long n,m,s,i,a,b,inc,sf;
long q[100005],viz[100005];

struct nod
{ nod* urm;
  long info;
};
nod *top[100005];

void read ()
{ nod *p;
  for (i=1;i<=m;i++)
	  {scanf ("%ld %ld", &a, &b);
       p=new nod;
	   p->urm=top[a];
	   p->info=b;
       top[a]=p;
      }
}

void bfs()
{nod *p;
 viz[s]=0;
 inc=sf=1;
 q[1]=s;
 while (inc<=sf)
 {p=top[q[inc]];
  while (p)
	{if (viz[p->info]==-1)
		{q[++sf]=p->info;
         viz[p->info]=viz[q[inc]]+1;
		}
    p=p->urm;		
    }
	inc++;
 }
}

void afisare ()
{ for (i=1;i<=n;i++)
	  printf ("%ld ",viz[i]);
}
int main()
{ freopen ("bfs.in","r",stdin);
  freopen ("bfs.out","w",stdout);
  scanf ("%ld %ld %ld",&n,&m,&s);
  read();
  for (i=1;i<=n;i++)
	  viz[i]=-1;
  bfs ();
  afisare();
  return 0;
}