Cod sursa(job #1907838)

Utilizator NarniussAnghelache Bogdan Narniuss Data 6 martie 2017 21:12:41
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <list>
#include <vector>
#include <queue>
#include <string.h>


#define dim 100001
using namespace std;

vector <int> parc;
list <int> *l;
queue <int> nodes;
bool vizitat[dim];
int drum[dim];
void bfs(int start)
{
  int i;
    memset(drum, -1 , sizeof(drum));
  nodes.push(start);
  vizitat[start] = true;
  drum[start] = 0;
  while(!nodes.empty()){
    i = nodes.front();
    nodes.pop();
    parc.push_back(i);

    for(list <int> :: iterator it = l[i].begin(); it != l[i].end(); ++it){
      if(!vizitat[*it]){
        vizitat[*it] = true;
        nodes.push(*it);
        drum[*it] = drum[i] + 1;
      }
    }


  }

}
 int main(int argc, char const *argv[]) {

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

  int x,y,n,m,s,i;

  fin>>n>>m>>s;


  l = new list <int> [n+1];

  for(int i = 0 ; i < m ;  i++){
    fin>>x>>y;
    l[x].push_back(y);
  }

  bfs(s);
  memset(vizitat, 0 , dim);


  for(i = 1 ; i <= n ; i++){
    fout<<drum[i]<< " ";
  }
  delete [] l;
  return 0;
}