Cod sursa(job #304199)

Utilizator TyberFMI Dogan Adrian Ioan Lucian Tyber Data 11 aprilie 2009 13:21:01
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
    #include <stdio.h>
    #include <vector>

    using namespace std;

    #define maxn 100010

    int N, M, L, Start;
    vector <int> A[maxn];
   int G[maxn], S[maxn], Cost[maxn];

   void BFS(int nod)
   {
       int i, j;

       memset(Cost, -1, sizeof(Cost));


     L = 1;
     Cost[nod] = 0;
     S[L] = nod;

       for (i = 1; i <= L; i++)
           for (j = 0; j < G[S[i]]; j++)
               if (Cost[A[S[i]][j]] == -1)
               {

                   S[++L] = A[S[i]][j];
                   Cost[S[L]] = Cost[S[i]] + 1;
               }
   }

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

       int i, x, y;

       scanf("%d %d %d ", &N, &M, &Start);



       for (i = 1; i <= M; i++)
       {
           scanf("%d %d ", &x, &y);
           A[x].push_back(y);
       }

       for (i = 1; i <= N; i++)
           G[i] = A[i].size();

       BFS(Start);

       for (i = 1; i <= N; i++)
           printf("%d ", Cost[i]);
       printf("\n");

       return 0;
   }