Cod sursa(job #463043)

Utilizator giuliastefGiulia Stef giuliastef Data 14 iunie 2010 14:03:09
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>
using namespace std;
struct nod{
       int info;
       nod *next;
       } *vecini[100005];
int n,m,s,c[100005],viz[100005],t[100005];
void add(nod *&prim, int val)
{
     nod *p=new nod;
     p->info=val;
     p->next=prim;
     prim=p;
}
void citire()
{
     int i,x,y;
     ifstream f("bfs.in");
     f>>n>>m>>s;
     for(i=1;i<=m;i++)
     {
                      f>>x>>y;
                      add(vecini[x],y);
     }
     f.close();
}
void bfs()
{
     int i,k=1;
     nod *p;
     c[1]=s;
     viz[s]=1;
     for(i=1;i<=k;i++)
      for(p=vecini[c[i]];p;p=p->next)
       if(!viz[p->info])
       {
        c[++k]=p->info;
        t[p->info]=c[i];
        viz[p->info]=1;
       }
}
void afisare()
{
     int i,j,nr;
     ofstream g("bfs.out");
     for(i=1;i<=n;i++)
      if(viz[i])
      {
       j=i;nr=0;
       while(j)
               nr++, j=t[j];
       g<<nr-1<<" ";
      }
      else 
           g<<"-1 ";
     g<<"\n";
     g.close();
}
int main()
{
    citire();
    bfs();
    afisare();
    return 0;
}