Cod sursa(job #1127821)

Utilizator Sirius2001Happy Birthday Sirius2001 Data 27 februarie 2014 13:57:58
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
/*
    Keep It Simple!
*/

#include<stdio.h>
#include<list>

#define MaxN 100005

using namespace std;

list<int> G[MaxN],Queue;
int n,m,S;
int dist[MaxN];

void BFS(int node)
{
     Queue.push_back(node);
     dist[node] = 0;

     while(Queue.size())
     {
         int Source = Queue.front();
         Queue.pop_front();

         for(list<int>::iterator it = G[Source].begin(); it!=G[Source].end(); it++)
           if(dist[*it] == -1)
             {
               Queue.push_back(*it);
               dist[*it] = dist[Source] + 1;
             }
     }
}


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

   scanf("%d%d%d",&n,&m,&S);

   int x,y;

   for(int i=1;i<=m;i++)
   {
      scanf("%d%d",&x,&y);
      G[x].push_back(y);
   }
    for(int i=1;i<=n;i++) dist[i] = -1;
    BFS(S);

    for(int i=1;i<=n;i++)
       printf("%d ",dist[i]);
}