Pagini recente » Cod sursa (job #402934) | Cod sursa (job #1487774) | Cod sursa (job #230171) | Cod sursa (job #1757665) | Cod sursa (job #1401055)
#include<cstdio>
using namespace std;
int viz[100001],nr,lst[100001],urm[2000001],vf[2000001],d[100001],q[100001],n,m,s;
void adauga (int x,int y)
{
++nr;
vf[nr]=x;
urm[nr]=lst[y];
lst[y]=nr;
}
void bfs(int x0)
{
int p=0,u=-1;
int x,y,poz;
q[++u]=x0;
d[x0]=0;
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 init()
{
for(int i=1;i<=n;i++) d[i]=-1;
}
int main(){
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
int x,y;
scanf("%d%d%d",&n,&m,&s);
init();
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
adauga(y,x);
}
bfs(s);
for(int i=1 ; i<=n ; i++ ) printf("%d ",d[i]);
return 0;
}