Cod sursa(job #905944)

Utilizator crudu_denisDenis Crudu crudu_denis Data 6 martie 2013 12:38:14
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<fstream>
#include<vector>

#define maxn 100001
using namespace std;
int n,m,s;
int nrv[maxn], c[maxn], d[maxn]; //G-nr de vecini S-coada

vector <int> a[maxn]; //lista de vecini
void citire()
{

   ifstream fin("bfs.in");
   fin>>n>>m>>s;
   int x,y;
   for(int i=1;i<=m;i++)
   {
      fin>>x>>y;
      a[x].push_back(y);
   }
   for(int i=1;i<=n;i++)
   {
     nrv[i]=a[i].size();
   }
 }
void bfs(int nod)
{
   for(int i=1;i<=n;i++)
      d[i]=-1;
   int i,j,dr=1;
   c[1]=nod;
   d[nod]=0;
   for(i=1;i<=n;i++)
      for(j=0;j<nrv[c[i]];j++)
      {
            if(d[a[c[i]][j]]==-1)
            {
               c[++dr]=a[c[i]][j];
               d[c[dr]]=d[c[i]]+1;
            }
      }
}

void afisare()
{
   ofstream fout("bfs.out");
   for(int i=1;i<=n;i++)
      if(d[i]==0&&i!=s)
         fout<<"-1 ";
      else
         fout<<d[i]<<" ";
}
int main()
{
   citire();
   bfs(s);
   afisare();
   return 0;
}