Cod sursa(job #604747)
#include<cstdio>
#include<vector>
using namespace std;
FILE *fin, *fout;
#define MAXN 100001
vector <int> a[MAXN];//listele de adiacenta
int d[MAXN], nvec[MAXN], q[MAXN];//numarul de arce, numarul de vecini, coada
int main()
{
int n, m, s, i, x, y, cap, coada, nod;
fin = fopen ("bfs.in", "r");
fout = fopen ("bfs.out", "w");
fscanf (fin, "%d %d %d", &n, &m, &s);
for (i = 1; i <=n; i++)
{
d[i] = -1;
nvec[i] = 0;
}
for (i = 1; i <= m; i++)
{
fscanf (fin, "%d %d", &x, &y);
nvec[x]++;
a[x].push_back(y);
}
q[1] = s; cap = coada = 1;
d[s] = 0;
while (cap <= coada)
{
nod = q[cap];
for (i = 0; i < nvec[nod]; i++)
if(d[a[nod][i]] == -1)
{
q[++coada] = a[nod][i];
d[a[nod][i]] = d[nod] + 1;
}
cap++;
}
for (i = 1; i <= n; i++)
fprintf (fout, "%d ", d[i]);
fclose (fin); fclose (fout);
return 0;
}