Cod sursa(job #328054)

Utilizator jupanubv92Popescu Marius jupanubv92 Data 30 iunie 2009 21:15:40
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<stdio.h>

#define Nmx 100001

int n,m,S;
int nr[Nmx],qu[Nmx];

struct nod
{
    nod *next;
    long inf;
};

nod *L[Nmx];

void insert(int x,int y)
{
    nod *aux;
    aux = new nod;
    aux -> next = L[x];
    aux -> inf = y;
    L[x]=aux;
}

void citire()
{
    scanf("%d%d%d",&n,&m,&S);

    int x,y;

    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&x,&y);
        insert(x,y);
    }
}

void bfs()
{
    int st,dr;

    nr[S]=1;

    qu[1] = S;

    st=dr=1;

    while(st<=dr)
    {

        for(nod *p=L[qu[st]];p!=NULL;p=p->next)
        {
            int g=p->inf;
            if(!nr[g])
            {
                nr[g]=nr[qu[st]]+1;
                qu[++dr]=g;
            }
        }

        ++st;
    }

}

void afisare()
{
    for(int i=1;i<=n;i++)
        printf("%d ",nr[i]-1);
    printf("\n");
}

int main()
{
    freopen("bfs.in","r",stdin);

    freopen("bfs.out","w",stdout);

    citire();

    bfs();

    afisare();

    return 0;
}