Cod sursa(job #2400682)

Utilizator gabriel.crosmanCrosman Gabriel gabriel.crosman Data 8 aprilie 2019 23:54:21
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

const int kNmax = 100005;

class Task {
 public:
	void solve() {
		read_input();
		print_output(get_result());
	}

 private:
	int n;
	int m;
	int source;
	vector<int> adj[kNmax];

	void read_input() {
		ifstream fin("bfs.in");
		fin >> n >> m >> source;
		for (int i = 1, x, y; i <= m; i++) {
			fin >> x >> y;
			adj[x].push_back(y);
		}
		fin.close();
	}

	vector<int> get_result() {
		vector<int> d(n + 1);

		int current_node;
		queue<int> q;
		vector<int> check(n+1);
		q.push(source);
		d[source] = 0;
		check[source] = 1;

		while(!q.empty()) {

			current_node = q.front();
			q.pop();

			for (int i : adj[current_node]) {

				if (check[i] == 0) {
					check[i] = 1;
					q.push(i);
					d[i] = d[current_node] + 1;
				}
			}
		}

		return d;
	}

	void print_output(vector<int> result) {
		ofstream fout("bfs.out");
		for (int i = 1; i <= n; i++) {
			if (i != source && result[i] == 0) {
				result[i] = -1;
			}
			fout << result[i] << (i == n ? '\n' : ' ');
		}
		fout.close();
	}
};

int main() {
	Task *task = new Task();
	task->solve();
	delete task;
	return 0;
}