Cod sursa(job #1703580)

Utilizator alexalbu95Albu Alexandru alexalbu95 Data 17 mai 2016 10:35:26
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;

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

vector<int> v[100005];
queue<int> q;
bool visited[100005];
int dist[100005];

void read(int &N, int &M, int &start) {

	int x, y;
	f >> N >> M >> start;
	for (int i = 0; i < M; ++i) {
		f >> x >> y;
		if (x != y) {
			v[x].push_back(y);
		}
	}
}

void bfs(int start) {

	int node;

	q.push(start);
	visited[start] = true;
	dist[start] = 0;

	for (; q.size(); ) {
		node = q.front();
		q.pop();
		visited[node] = true;

		for (auto &x : v[node]) {
			if (visited[x] == false) {
				dist[x] = dist[node] + 1;
				visited[x] = true;
				q.push(x);
			}
		}
	}

}

int main()
{
	int N, M, start;

	read(N, M, start);
	for (int i = 1; i <= N; ++i) {
		dist[i] = -1;
	}

	bfs(start);

	for (int i = 1; i <= N; ++i) {
		g << dist[i] << "\n";
	}
	return 0;
}