Pagini recente » Cod sursa (job #3255623) | Cod sursa (job #1018058) | Cod sursa (job #119017) | Cod sursa (job #198901) | Cod sursa (job #250689)
Cod sursa(job #250689)
#include<stdio.h>
#define N 100000
#define M 1000000
int n,m,x0;
int *a[N],x[M],y[M],d[N];
void citire()
{
int i,j;
scanf("%d%d%d",&n,&m,&x0);
for(i=1;i<=m;i++)
{
scanf("%d%d",&x[i],&y[i]);
++d[x[i]];
}
for(i=1;i<=n;i++)
{
a[i]=new int[d[i]+1];
a[i][0]=0;
}
for(i=1;i<=m;i++)
{
a[x[i]][++a[x[i]][0]]=y[i];
}
}
void bfs(int vf)
{
int q[N],p=0,u=0,x,y;
int i;
for(i=1;i<=n;i++)
d[i]=-1;
q[u++]=x0;
d[x0]=0;
while(p!=u)
{
x=q[p++];
for(i=1;i<=a[x][0];i++)
{
y=a[x][i];
if(d[y]==-1)
{
q[u++]=y;
d[y]=1+d[x];
}
}
}
}
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
citire();
bfs(x0);
for(int i=1;i<=n;i++)
printf("%d ",d[i]);
return 0;
}