Cod sursa(job #228428)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 7 decembrie 2008 11:06:58
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>
#define Max 100010

using namespace std;

ifstream fin ("bfs.in");
ofstream fout ("bfs.out");

struct nod
{
     int inf;
     nod * next;
}*sir[Max];

int n,m,s;
int viz[Max],rez[Max],coada[Max],nr;

void baga(int s,int d)
{
     nod *q=new nod;
     q->inf=s;
     q->next=sir[d];
     sir[d]=q;
}

void citire()
{
     int x,y;
     fin>>n>>m>>s;
     for (int i=0;i<m;i++)
     {
          fin>>x>>y;
          baga(y,x);
     }
}

void bfs()
{
     for (int i=0;i<=n;i++)
          rez[i]=-1;
     coada[nr++]=s;
     viz[s]=1;
     rez[s]=0;
     int niv=0;

     for (int i=0;i<nr;i++)
     {
          niv++;
          for (nod *j=sir[coada[i]];j;j=j->next)
               if (!viz[j->inf])
               {
                    viz[j->inf]=1;
                    rez[j->inf]=niv;
                    coada[nr++]=j->inf;
               }
     }
}

void afisare()
{
     for (int i=1;i<=n;i++)
          fout<<rez[i]<<" ";
}

int main ()
{
     citire();
     bfs();
     afisare();
     return 0;
}