Cod sursa(job #2276572)

Utilizator ZappaManIosif Adrian-Mihai ZappaMan Data 4 noiembrie 2018 21:27:21
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#include <utility>

using namespace std;

const int NMAX = 100005;
typedef pair<int,int> pii;

queue<pair<int,int>> q;
vector<int> g[NMAX];
int d[NMAX];

int N,M,S;

void bfs(int root) {
   q.push(make_pair(root,0));

   while (q.size() > 0) {
      pair<int,int> p = q.front();
      q.pop();
      int node  = p.first;
      int level = p.second;
      d[node] = level;
      for (int v : g[node]) {
         if (d[v] == -1) {
            q.push(make_pair(v, level + 1));
         }
      }
   }
}

int main() {
   ifstream iff("bfs.in");
   ofstream off("bfs.out");

   iff >> N >> M >> S;

   for (int i = 0; i <= N; ++i) {
      d[i] = -1;
   }

   for (int i = 0; i < M; ++i) {
      int n1, n2;
      iff >> n1 >> n2;
      g[n1].push_back(n2);
   }

   bfs(S);

   for (int i = 1; i <= N; ++i) {
      off << d[i] << " ";
   }

   return 0;
}