Cod sursa(job #631522)

Utilizator deneoAdrian Craciun deneo Data 8 noiembrie 2011 13:11:52
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb

#include<cstdio>
#include<deque>
#include<vector>
using namespace std;

#define mk make_pair

vector<int> g[100002];
int n, m, s, cost[100002];
deque< pair<int, int> > d;

void bfs() {
	int i, k, t;
	d.push_back(mk(s, 0));
	cost[s] = 0;
	while(d.size() > 0) {
		k = d[0].first; t = d[0].second;
		d.pop_front();
		for(i = 0; i < g[k].size(); ++i)
			if(cost[g[k][i]] == -1) {
				d.push_back(mk(g[k][i], t + 1));
				cost[g[k][i]] = t + 1;
			}

	}
}

int main() {
	int i, x, y;
	freopen("bfs.in", "r", stdin);
	freopen("bfs.out", "w", stdout);
	scanf("%d%d%d", &n, &m, &s);
	for(i = 1; i <= m; ++i) {
		scanf("%d%d", &x, &y);
		g[x].push_back(y);
	}
	memset(cost, -1, sizeof(cost));
	bfs();
	for(i = 1; i <= n; ++i)
		printf("%d ", cost[i]);

	printf("\n");
	return 0;
}