Cod sursa(job #916795)

Utilizator superman_01Avramescu Cristian superman_01 Data 16 martie 2013 21:42:00
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include<cstdio>
#include<vector>
#include<queue>
#include<bitset>
 
#define MAX_SIZE 100005
 
FILE *f=fopen("bfs.in","r");
FILE *g=fopen("bfs.out","w");
 
using namespace std;
 
 
int n,m,s;
int a[MAX_SIZE],b[MAX_SIZE],dist[MAX_SIZE];
vector <int> gr[MAX_SIZE];
bool used[MAX_SIZE];
 
void bfs( void )
{
    int k=1;
    used[s]=true;
    for(int i=1; i<=k ;++i)
    {
        for(int ii(0); ii<gr[a[i]].size();ii++)
        {
            int node=gr[a[i]][ii];
               if(!used[node])
               {
                   used[node]=true;
                   dist[node]=dist[a[i]]+1;
                   a[++k]=node;
 
               }
 
        }
 
 
    }
 
 
}
void write( void )
{
  for(int i(1); i<= n; i++)
  {
      if(dist[i] == 0 && i!=s)
        fprintf(g,"-1 ");
      else
        fprintf(g,"%d ",dist[i]);
  }
  fclose(g);
 
 
}
 
 
 
int main( void )
{
    fscanf(f,"%d%d%d",&n,&m,&s);
    a[1]=s;
    for(int i(1); i<= m ; ++i)
       {
           int x,y;
           fscanf(f,"%d%d",&x,&y);
           gr[x].push_back(y);
       }
       fclose(f);
     bfs();
     write();
     return 0;
 
}