Cod sursa(job #2052922)

Utilizator CriogeniXBociat Daniel Tiberiu CriogeniX Data 31 octombrie 2017 10:42:31
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

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

const int NMAX = 100005;
vector <int>G[NMAX];
queue <int> coada;
int sol[NMAX];
int N,M,S;

void Read(){
  in >> N >> M >> S;
  int x, y;
  for(int i = 0; i < M; ++i)
  {
    in >> x >> y;
    G[x].push_back(y);
  }
  coada.push(S);
}

void BFS(int start){
  for(int i = 1; i <= N; ++i)
    sol[i] = -1;
  sol[start] = 0;
  while(!coada.empty()){
    int nod = coada.front();
    coada.pop();
    for(int i = 0; i < G[nod].size(); ++i){
      if(sol[G[nod][i]] == -1){
        sol[G[nod][i]] = sol[nod] + 1;
        coada.push(G[nod][i]);
      }
    }
  }
}

void Print(){
  for(int i = 1; i <= N; ++i)
    out << sol[i] << " ";
  out << "\n";
}

int main()
{
    Read();
    BFS(S);
    Print();
    return 0;
}