Cod sursa(job #1556894)

Utilizator raztaapDumitru raztaap Data 26 decembrie 2015 11:57:19
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <cstdio>
#define MAXN 100100
struct nod{int nd; nod *next;};
nod *L[MAXN];
struct coada{int val; int d;};
coada C[MAXN], X;
int n, m, s, uz[MAXN];
void citire()
{
    int i, x, y;
    nod *p;
    scanf("%d%d%d", &n, &m, &s);
    for(i=1;i<=m;++i)
    {
        scanf("%d%d", &x, &y);
        p=new nod;
        p->nd=y;
        p->next=L[x];
        L[x]=p;
    }
    for(i=1;i<=n;++i)
        uz[i]=-1;
}
void bfs()
{
    nod *p;
    int ic, sf;
    ic=sf=1;
    C[ic].val=s;
    C[ic].d=0;
    uz[s]=0;
    while(ic<=sf)
    {
        X=C[ic++];
        p=L[X.val];
        while(p)
        {
            if(uz[p->nd]==-1)
            {
                C[++sf].val=p->nd;
                C[sf].d=X.d+1;
                uz[p->nd]=X.d+1;
            }
            p=p->next;
        }
    }
}
void afisare()
{
    int i;
    for(i=1;i<=n;++i)
        printf("%d ", uz[i]);
    printf("\n");
}
void rezolva_problema()
{
    citire();
    bfs();
    afisare();
}
int main()
{
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);
    rezolva_problema();
    return 0;
}