Cod sursa(job #1774134)

Utilizator RobertSSamoilescu Robert RobertS Data 8 octombrie 2016 16:52:46
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

int N, M, S;
int const MAX_N = 100001;
bool vis[MAX_N];
int cost[MAX_N];

vector<int> graph[MAX_N];

void BFS(int node, int depth) {

	queue<int> q;
	vis[node] = true;
	q.push(node);

	while (!q.empty()) {
		int front = q.front();
		q.pop();

		for (size_t i = 0; i < graph[front].size(); i++) {
			int next_node = graph[front][i];
			if (!vis[next_node]) {
				vis[next_node] = true;
				q.push(next_node);
				cost[next_node] = cost[front] + 1;
			}
		}
	}

}

int main() {

	ifstream fin("bfs.in");
	ofstream fout("bfs.out");

	fin >> N >> M >> S;

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

	} 


	BFS(S, 0);

	for (int i = 1; i <= N; i++) {
		if (vis[i])
			fout << cost[i] << " ";
		else 
			fout << -1 << " ";

	}

	fin.close();
	fout.close();

	return 0;	
}