Pagini recente » Cod sursa (job #422912) | Cod sursa (job #561927) | Cod sursa (job #1844635) | Cod sursa (job #2420190) | Cod sursa (job #1293778)
#include <cstdio>
using namespace std;
FILE *in=fopen ("bfs.in","r");
FILE *out=fopen ("bfs.out","w");
int n,m,lst[1000001],vf[1000001],urm[1000001],d[1000001],q[1000001],x0;
void adauga (int x,int y)
{
vf[++m]=y;
urm[m]=lst[x];
lst[x]=m;
}
void init ()
{
for (int i=1; i<=n; i++)
d[i]=-1;
}
void bfs (int x)
{
int p=1,u=0,poz,y;
d[x]=0;
q[++u] = x;
while (p<=u)
{
x=q[p++];
poz=lst[x];
while (poz!=0)
{
y=vf[poz];
if (d[y]==-1)
{
d[y]=1+d[x];
q[++u]=y;
}
poz=urm[poz];
}
}
}
void afisare ()
{
for (int i=1; i<=n; i++)
fprintf (out,"%d ",d[i]);
}
void citire ()
{
int a;
fscanf (in,"%d%d%d",&n,&a,&x0);
for (int i=0; i<a; i++)
{
int x,y;
fscanf (in,"%d%d",&x,&y);
adauga(x,y);
}
init();
bfs (x0);
afisare ();
}
int main()
{
citire();
return 0;
}