Cod sursa(job #560734)

Utilizator raica_cristiraica dumitru cristian raica_cristi Data 18 martie 2011 17:36:48
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include<stdio.h>
#include<queue.h>
#include<algorithm>

#define dim 101000

using namespace std;

int n,m,nod2,x,y;
int dist[dim];
struct nod
{
    int el;
    nod *next;
}*liste[dim];
queue <int > q;
inline void add(int x , int y )
{
    nod *p=new nod ;
    p->el = y;
    p->next = liste[x];
    liste[x] = p;
}
void read ()
{
    scanf("%d %d %d",&n,&m,&nod2);
    for(int i=1 ; i<=m;i++)
    {
        scanf("%d %d",&x,&y);
        if ( y != nod2 )
        add(x,y);
    }
}
inline void afis ()
{
    for(int i=1 ; i<=n; i++)
    {
        if ( dist [i] == 0  && i!=nod2 )
        {
            printf("-1 ");

        }
        else
        printf("%d ",dist[i] ) ;
    }
}
void solve ()
{
    read();
    nod *p;
    for(q.push(nod2); !q.empty() ; q.pop())
    {
        x = q.front ();
        p= liste[x];
        while ( p )
        {
            y = p->el;
            if ( dist[y]==0 || dist[y]>dist[x]+1)
            {
                q.push(y);
                dist[y] = dist[x]+1;
            }
            p=p->next ;
        }
    }
    afis () ;
}

int main ()
{
    freopen("bfs.out","w",stdout);
    freopen("bfs.in","r",stdin);
    solve();

    return 0;
}