Cod sursa(job #353913)

Utilizator zenith09lucas eugene zenith09 Data 6 octombrie 2009 18:47:08
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.68 kb
#include <iostream>
#include <fstream>
using namespace std;
typedef struct un_nod
{       un_nod * urm;
        int info;}
        TNOD;
        
TNOD *v[100001];
long n,m,start,x,y,i;
long vizitat[100001],cost[100001];
void citire()
{ TNOD *p;

     ifstream f("bfs.in");
     f>>n>>m>>start;
    // for(i=1;i<=n;i++) v[i]urm=NULL;

     for(i=1;i<=m;i++)
       {f>>x>>y;
         p=new TNOD;
         p->info=y;
         p->urm=v[x];
         v[x]=p;
         
        
         }
     
     f.close();
     //am cam terminat in functia asta well done
     }
     
     void afisare()
     {ofstream g("bfs.out");
    for(i=1;i<=n;i++)
      g<<cost[i]<<" ";   
            }
     
void bfs()
{TNOD *p;
int li,ls,c[100];
//initializam li,ls
    li=1;ls=1;
    //punem nodul de start
    c[li]=start;
    vizitat[start]=1;
    //incepem parcurgerea bfs
    while (li<=ls)
     {//la inceput crestem costul nodurilor nevizitate
          for(i=1;i<=n;i++)  if (vizitat[i]==0) cost[i]++;
     
     //vedem vecinii lui c[li] care sunt tinuti incepan cu adresa v[c[li]]
          for(i=1;i<=n;i++)
        {
                      p=v[c[li]];
                      while (p)
                      {if (vizitat[p->info]==0)  {vizitat[p->info]=1;
                                                  ls++;
                                                  c[ls]=p->info;
                                                  }
                      p=p->urm;
                                                  }//while
     
}
     li++;
}
for(i=1;i<=n;i++)
  if (vizitat[i]==0)  cost[i]=-1;
}
int main()
{
    citire();
    bfs();
    afisare();
 
}