Mai intai trebuie sa te autentifici.
Cod sursa(job #1011129)
Utilizator | Data | 16 octombrie 2013 11:18:54 | |
---|---|---|---|
Problema | BFS - Parcurgere in latime | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.54 kb |
#include<stdio.h>
#define N 100001
struct nod{int info;
nod *urm;} *lista[N], *p;
int sol[N], coada[N], vf;
void BFS(int vf)
{
int prim, ultim, nod_cur;
for(int i = 1; i <= N; i++)
sol[i] = -1, coada[i] = 0;
prim = ultim = 1;
coada[prim] = vf;
sol[vf] = 0;
while(prim <= ultim)
{
nod_cur = coada[prim];
for(p = lista[nod_cur]; p; p = p->urm)
if(sol[p->info] == -1)
{
coada[++ultim] = p->info;
sol[p->info] = sol[nod_cur] + 1;
}
prim++;
}
}
int main()
{
freopen("bfs.in","r", stdin);
freopen("bfs.out","w", stdout);
int i, n, m, x, y;
scanf("%d %d %d", &n, &m, &vf);
for(i = 1; i <= m; i++)
{
scanf("%d %d", &x, &y);
p = new nod;
p->info = y;
p->urm = lista[x];
lista[x] = p;
}
BFS(vf);
for(i = 1; i <= n; i++)
printf("%d ", sol[i]);
return 0;
}