Cod sursa(job #368740)

Utilizator raica_cristiraica dumitru cristian raica_cristi Data 25 noiembrie 2009 18:41:27
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include<stdio.h>

#define dim 100100
int s,n,m;
int viz[dim],c[dim],a[dim];
struct nod
{
    int el;
    nod *next;
} *liste[dim];
void add(int x,int y)
{
    nod *p=new nod;
    p->el=y;
    p->next=liste[x];
    liste[x]=p;
}
void read()
{
    int x,y;
    scanf("%d%d%d",&n,&m,&s);
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&x,&y);
        add(x,y);
    }
}
void solve()
{
    int st,dr,ant;
    st=dr=0;
    c[0]=s;
    dr++;
    viz[s]=1;
    while(dr>=st)
    {
        
        ant=c[st];
        nod *p=liste[c[st]];
        while(p)
        {
            if(viz[p->el]!=1)
            {
                viz[p->el]=1;
                a[p->el]=a[ant]+1;
                c[dr++]=p->el;
             }
           // ant=p->el;
            p=p->next;
        }
        st++;
    }
    for(int i=1;i<=n;i++)
    if(a[i]==0 && i!=s)
    printf("-1 ");
    else
    printf("%d ",a[i]);
}
int main ()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    read();
    solve();
    return 0;
    
}