Cod sursa(job #1051765)

Utilizator vendettaSalajan Razvan vendetta Data 10 decembrie 2013 16:22:53
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <fstream>
#include <queue>

using namespace std;

#define nmax 100005

ifstream f("bfs.in");
ofstream g("bfs.out");

struct graf{
   int nod;
   graf *urm;
};

int n, m, sursa, dist[nmax];
graf *gf[nmax];

void adauga(int x, int y){
   // x -> y;
   graf *newNod = new graf;
   // initial pt fiecare nod lista de vecini va avea un pointer catre NULL;
   //acum dupa ce voi termina va pointa catre newNod care la randul lui va avea un pointer catre ce ponta inainte graful
   newNod->nod = y;
   newNod->urm = gf[x];
   gf[x] = newNod;
}

void citeste(){
   f >> n >> m >> sursa;
   for(int i=1; i<=m; ++i){
      int x, y;
      f >> x >> y;
      adauga(x, y);
   }
}

void rezolva(){
   for(int i=1; i<=n; ++i) dist[i] = -1;
   dist[sursa] = 0;
   queue<int> q;
   q.push(sursa);
   for(; !q.empty(); ){
      int nod = q.front(); q.pop();
      for(graf *p = gf[nod]; p != NULL; p = p -> urm){
         if (dist[ p->nod ] == -1){
            dist[ p->nod ] = dist[nod] + 1;
            q.push( p->nod );
         }
      }
   }
   for(int i=1; i<=n; ++i) g << dist[i] << " "; g << "\n";
   //for(int i=1; i<=n; ++i) cout << dist[i] << " "; cout << "\n";
}

int main(){
   citeste();
   rezolva();

   f.close();
   g.close();

   return 0;
}