Pagini recente » Cod sursa (job #109014) | Cod sursa (job #1747315) | Cod sursa (job #2862586) | Cod sursa (job #1000615) | Cod sursa (job #598802)
Cod sursa(job #598802)
#include <stdio.h>
#include <vector>
using namespace std;
#define maxn 100010
long i,j,x,y,N,M,S;
vector <int> A[maxn];
int G[maxn],coada[maxn],cost[maxn];
void bfs(long start)
{
for (i=1; i<=N; i++) cost[i]=-1;
long L=1;
coada[L]=start;
cost[start]=0;
for (i=1; i<=L; i++)
{
for (j=0; j<G[coada[i]]; j++)
{
if (cost[A[coada[i]][j]]==-1)
{
coada[++L]=A[coada[i]][j];
cost[coada[L]]=cost[coada[i]]+1;
}
}
}
}
int main ()
{
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
scanf("%d %d %d", &N,&M,&S);
for (i=1; i<=M; i++)
{
scanf("%d %d", &x,&y);
A[x].push_back(y);
}
for (i=1; i<=N; i++) G[i]=A[i].size();
bfs(S);
for (i=1; i<=N; i++) printf("%d ", cost[i]);
return 0;
}