Cod sursa(job #560706)

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

#define dim 101000
#define pb push_back

int n,m,start,x,y;
vector <int> v[dim];
int dist[dim];
queue <int > q;
void read()
{
    scanf("%d %d %d\n",&n,&m,&start);
    for(int i=1 ; i<=m;i++ )
    {
        scanf("%d %d",&x,&y);
     //   printf("%d %d\n",x,y);
        if ( y != start)
        {
            v[x].pb(y);
      //     printf("%d %d\n",x,y);
        }
    }
}
void solve ()
{
    int x,y;
    for(q.push(start) ;!q.empty(); q.pop() )
    {
        x = q.front ();
    //    printf("%d ",x);
        for(int i=0 ; i<v[x].size() ; i++)
        {
            y = v[x][i];
            if ( dist[y] > dist[x]+1)
            {
                q.push(y);
                dist[y] = dist[x]+1;
          //      printf("%d ",y);
            }
            else
            if ( dist[y] == 0)
            {
                q.push(y);
                dist[y] = dist[x]+1;
         //       printf("%d ",y);
            }

        }
    }
   // printf("\n");
}
void afis (int a[dim])
{
    for(int i=1 ; i<=n;i++)
    if ( i != start && a[i] == 0 )
    printf("-1 ");
    else
    printf("%d ",a[i]);
}
void set(int a[dim])
{
    for(int i=1 ; i<=n;i++)
    a[i] = dim;
}
int main ()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    read();
  //  set (dist);
    solve();
    afis(dist);
    return 0;

}