Cod sursa(job #1258033)

Utilizator juniorOvidiu Rosca junior Data 8 noiembrie 2014 13:26:33
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>

#define NMAX 100001

using namespace std;

ifstream fi("bfs.in");
ofstream fo("bfs.out");
int n, m, s, l, c, i, nc, vec, d[NMAX];
vector<int> v[NMAX];
queue<int> q;

int main() {
	fi >> n >> m >> s;
	for (i = 1; i <= m; i++) {
		fi >> l >> c;
		v[l].push_back(c);
	}
	for (i = 1; i <= n; i++)
    d[i] = -1;
  q.push(s); d[s] = 0;
	while (not q.empty()) {      // cat timp exista elemente in coada
		nc = q.front();      // Extragem nodul curent.
		for (i = 0; i < v[nc].size(); i++) {
      vec = v[nc][i];  // Vecinul luat din vector.
			if (d[vec] == -1) { // Este nevizitat?
			  q.push(vec);         // Punem vec in coada.
        d[vec] = d[nc]+1;
			}
		}
		q.pop(); // Scoatem din coada nodul curent.
	}
	for (i = 1; i <= n; i++)
    fo << d[i] << ' ';
	return 0;
}