Cod sursa(job #682950)
#include<iostream.h>
#include<fstream.h>
ifstream fin("bfs.in");
ofstream fout("bfs.out");
int a[2][1000],n,m,s,st[1000],viz[1000];
void citire()
{
int x,y,i;
fin>>n>>m>>s;
for(i=1;i<=m;i++)
{
fin>>x>>y;
a[0][i]=y;
a[1][i]=st[x];
st[x]=i;
}
}
void bfs(int s)
{
int p,u,c[1000],v,i,k;
k=1;
p=u=1;
c[p]=s;
viz[s]=k;
while(p<=u)
{
v=st[c[p]];
p++;
while(p<=v)
{
if(viz[a[0][v]]==0)
{
u++;
c[u]=a[0][v];
viz[a[0][v]]=k;
}
v=a[1][v];
}
k++;
}
viz[s]=0;
}
void afisare()
{
int i;
for(i=1;i<=n;i++)
{
if(viz[i]==0 && i!=s)
{
fout<<"-1"<<' ';
}
else
fout<<viz[i]<<' ';
}
}
int main()
{
citire();
bfs(s);
afisare();
return 0;
}