Cod sursa(job #356850)

Utilizator xtremespeedzeal xtreme Data 16 octombrie 2009 22:13:01
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <stdio.h>
#include <vector>
#define Nmax 100005
#define Mmax 1000005
using namespace std;

int N,M,S,nrarc[Nmax],C[Mmax];
vector<int> G[Nmax];

void citire()
     {freopen("bfs.in","r",stdin);
      int i,a,b;
      scanf("%d %d %d",&N,&M,&S);
      for(i=1;i<=M;i++)
            {scanf("%d %d",&a,&b);
             G[a].push_back(b);
             }
      fclose(stdin);
      }
void bfs()
      {vector<int>::iterator it;int i,end;
       memset(nrarc,-1, sizeof(nrarc));
       C[1]=S;end=1;nrarc[S]=0;
       for(i=1;i<=end;i++)
            for(it=G[C[i]].begin();it!=G[C[i]].end();it++)
                         if(nrarc[*it]==-1)
                            {C[++end]=*it;
                             nrarc[*it]=nrarc[C[i]]+1;
                            }
       }       
void scrie()
     {freopen("bfs.out","w",stdout);
      int i;
      for(i=1;i<=N;i++)         printf("%d ",nrarc[i]);
      printf("\n");fclose(stdout);
      }
int main()
    {citire();
     bfs();
     scrie();
     return 0;
     }