Cod sursa(job #2195439)

Utilizator lucametehauDart Monkey lucametehau Data 16 aprilie 2018 13:32:56
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

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

const int nmax = 100000;

int n, m, S;
int x, y;

vector < vector <int> > g(1 + nmax);
queue <int> q;
int viz[1 + nmax];
bool ok[1 + nmax];

int main() {
  cin >> n >> m >> S;
  for(int i = 1; i <= m; i++) {
    cin >> x >> y;
    g[x].push_back(y);
  }
  q.push(S);
  while(!q.empty()) {
    int nod = q.front();
    q.pop();
    for(int i = 0; i < g[nod].size(); i++) {
      if(g[nod][i] != S && (viz[g[nod][i]] == 0 || viz[g[nod][i]] > viz[nod] + 1)) {
        viz[g[nod][i]] = viz[nod] + 1;
        q.push(g[nod][i]);
      }
    }
  }
  for(int i = 1; i <= n; i++) {
    if(viz[i] || i == S)
      cout << viz[i] << " ";
    else
      cout << "-1 ";
  }
  return 0;
}