Pagini recente » Cod sursa (job #1828111) | Cod sursa (job #53053) | Cod sursa (job #557547) | Cod sursa (job #2243004) | Cod sursa (job #1193883)
#include<stdio.h>
using namespace std;
const int N = 100500, M = 1000005;
int q[N], d[N], nr = 0, vf[M], urm[M], lst[N], n;
bool viz[N];
void adaugare(int x, int y)
{
++nr;
vf[nr] = y;
urm[nr] = lst[x];
lst[x] = nr;
}
void bfs (int x0)
{
int i, x, y, p, u, poz;
for (i = 1; i <= n; i++)
d[i] = -1;
viz[x0] = 1;
p = 1;
u = 0;
q[++u] = x0;
d[x0] = 0;
while (p <= u)
{
x = q[p++];
poz = lst[x];
while (poz != 0)
{
y = vf[poz];
if (d[y] == -1)
{
q[++u] = y;
d[y] = 1 + d[x];
}
poz = urm[poz];
}
}
}
int main ()
{
FILE *in, *out;
in = fopen ("bfs.in", "r");
out = fopen ("bfs.out", "w");
int s, m, i;
fscanf (in, "%d%d%d", &n, &m, &s);
int x, y;
for (i = 1; i <= m; i++)
{
fscanf(in, "%d%d", &x, &y);
adaugare(x,y);
}
bfs(s);
for (i = 1; i <= n; i++)
fprintf(out, "%d ", d[i]);
return 0;
}