Cod sursa(job #726634)

Utilizator Teodor94Teodor Plop Teodor94 Data 27 martie 2012 13:01:38
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<cstdio>
#include<vector>

using namespace std;

const int M = 1000002;
const int N = 100002;

int n, m, s, x[N], dist[N];
vector <int> v[M];

void citire() {
	scanf("%d%d%d", &n, &m, &s);
	
	for (int i = 1; i <= m; ++i) {
		int x1, y1;
		scanf("%d%d", &x1, &y1);
		
		v[x1].push_back(y1);
	}
}

void bfs() {
	int p = 0, q = 0;
	x[0] = s;
	
	while (p <= q) {
		for (int i = 0; i < (int) v[x[p]].size(); ++i) {
			int xx = v[x[p]][i];
			
			if ( (xx != s) && (dist[xx] > dist[x[p]] + 1 || dist[xx] == 0) ) {
				dist[xx] = dist[x[p]] + 1;
				x[++q] = xx;
			}
			
		}
		
		++p;
	}
}

int main() {
	freopen("bfs.in", "r", stdin);
	freopen("bfs.out", "w", stdout);
	
	citire();
	
	bfs();
	
	for (int i = 1; i <= n; ++i)
		if (i != s && dist[i] == 0)
			dist[i] = -1;
		
	for (int i = 1; i <= n; ++i)
		printf("%d ", dist[i]);
	
	printf("\n");
	
	return 0;
}