Cod sursa(job #1435892)

Utilizator gallexdAlex Gabor gallexd Data 14 mai 2015 18:58:35
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

int N, M, S;
vector<int> graph[100100];
queue<int> Q;
int cost[100100];
bool viz[100100];

void bfs() {
	int n;
	Q.push(S);
	viz[S] = true;
	cost[S] = 0;
	while (!Q.empty()) {
		n = Q.front();
		Q.pop();
		viz[n] = true;
		for (int i=0; i<graph[n].size(); ++i) {
			if (viz[graph[n][i]] == false) {
				Q.push(graph[n][i]);
			    cost[graph[n][i]] = cost[n]+1;
			}
		}
	}
}

int main () {

	freopen("bfs.in", "r", stdin);
	freopen("bfs.out", "w", stdout);
	int x, y;
	
	scanf("%d %d %d", &N, &M, &S);
	for (;M;--M) {
		scanf("%d %d", &x, &y);
		graph[x].push_back(y);
	}

	for (int i=1; i<=N; ++i)
		cost[i] = -1;
	
	bfs();
	
	for (int i=1; i<=N; ++i)
		printf("%d ", cost[i]);
	
	return 0;
}