Pagini recente » Cod sursa (job #1431550) | Cod sursa (job #1560815) | Cod sursa (job #2465782) | Cod sursa (job #2268356) | Cod sursa (job #245293)
Cod sursa(job #245293)
#include<stdio.h>
#define N 100005
#define M 1000005
int *a[N];
int d[N],x[M],y[M],n,m,viz[M],x0;
void citire()
{
scanf("%d%d%d",&n,&m,&x0);
for (int i=1; i<=m; ++i)
{
scanf("%d%d",&x[i],&y[i]);
++d[x[i]];
//++d[y[i]];
}
for (int i=1; i<=n; ++i)
{
a[i]=new int [1+d[i]];
a[i][0]=0;
}
for (int i=1; i<=m; ++i)
{
a[x[i]][++a[x[i]][0]]=y[i];
//a[y[i]][++a[y[i]][0]]=x[i];
}
}
void bfs(int x0)
{
int p=0,u=0,coada[N],x,y;
for(int i=1;i<=n;++i)
d[i]=-1;
coada[u++]=x0;
viz[x0]=1;
d[x0]=0;
while (p!=u)
{
x=coada[p++];
for (int i=1; i<=a[x][0]; ++i)
{
y=a[x][i];
if (!viz[y])
{
coada[u++]=y;
viz[y]=1;
d[y]=1+d[x];
}
}
}
for (int i=1; i<=n;++i)
printf("%d ",d[i]);
}
/*void afis()
{
for (int i=1; i<=n;++i)
printf("%d",coada[i]);
}*/
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
citire();
bfs(x0);
//afis();
return 0;
}