Pagini recente » Cod sursa (job #2536632) | Cod sursa (job #36664) | Cod sursa (job #2095403) | Cod sursa (job #1957614) | Cod sursa (job #235747)
Cod sursa(job #235747)
#include <stdio.h>
const long NMAX=100010;
long n, m, s, i, d[NMAX], *a[NMAX], x[NMAX*10], y[NMAX*10], dist[NMAX];
void bfs(long s);
int main()
{
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
scanf("%ld%ld%ld", &n, &m, &s);
for (i=0; i<m; i++)
{
scanf("%ld%ld", &x[i], &y[i]);
d[x[i]]++;
}//for i
for (i=1; i<=n; i++)
{
a[i]=new long[d[i]+1];
a[i][0]=0;
}//for i
for (i=0; i<m; i++)
a[x[i]][++a[x[i]][0]]=y[i];
bfs(s);
for (i=1; i<=n; i++)
printf("%ld ", dist[i]);
return 0;
}//main
void bfs(long s)
{
long p=0, u=0, q[NMAX], t, xx;
for (i=1; i<=n; i++)
dist[i]=-1;
q[u]=s;
dist[s]=0;
while (p<=u)
{
t=q[p];
p++;
for (i=1; i<=a[t][0]; i++)
{
xx=a[t][i];
if (dist[xx]==-1)
{
dist[xx]=dist[t]+1;
u++;
q[u]=xx;
}//if
}//for i
}//whle
}//bfs