Cod sursa(job #754329)

Utilizator MarquiseMarquise Marquise Data 1 iunie 2012 17:37:37
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <stdio.h>
#include <string.h>

#define NMAX 100001

struct nod
{
       int info;
       nod *next;
};

nod *l[NMAX];

int n, m, s, viz[NMAX], q[NMAX];

void adaug(int x, int y)
{
     nod *aux;
     
     aux = new nod;
     aux -> info = y;
     aux -> next = l[x];
     l[x] = aux;        
}

void bfs()
{
     int i, st, dr;
     nod *p;
     
     memset(viz, -1, sizeof(viz));
     
     viz[s] = 0;
     q[0] = s;
     st = dr = 0;
     
     while ( st <= dr)
     {
           for ( p = l[q[st]]; p; p = p -> next)
               if ( viz[p -> info] == -1)
               {
                    q[++dr] = p -> info;
                    viz[ p-> info] = viz[q[st]] + 1;
               }
          st++;     
     }
     
}

int main()
{
    int i, x, y;
    
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);
    
    scanf("%d %d %d", &n, &m, &s);
    for (i = 1; i <= m; i++)
    {
        scanf("%d %d", &x, &y);
        if ( x != y)
           adaug(x, y);
    }
    
    bfs();
    for ( i = 1; i <= n; i++)
        printf("%d ", viz[i]);
    
    printf("\n");    
    
    fclose(stdin);
    fclose(stdout);
    return 0;
}