Cod sursa(job #387424)

Utilizator runnaway90Oprescu Radu Constantin runnaway90 Data 27 ianuarie 2010 17:03:40
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include<stdio.h>
#include<vector>

#define pb push_back
#define N 100005
#define INF 0x3f3f3f3f

using namespace std;

int n, m, i, x, y, fol[N], sol[N], q[3*N], p , u, w;
vector <int> a[N];

int main(){
	freopen("bfs.in","r", stdin);
	freopen("bfs.out","w", stdout);

	scanf("%d %d %d", &n, &m, &w);
	for (i = 1; i <= m; i++) scanf("%d %d", &x, &y), a[x].pb(y);

	q[0] = w; fol[w] = 1; 
	memset (sol, INF, sizeof(sol));
	sol[w] = 0;
	
	for (p = 0, u = 0; p <= u; p++){
		x = q[p];
		for (int it = 0; it < a[x].size(); it++)
			if (sol[x] + 1 < sol[a[x][it]]){
				sol[a[x][it]] = sol[x] + 1;
				q[++u] = a[x][it];
		}
	}

	for (i = 1; i <= n; i++)
		printf("%d ", (sol[i] == INF ? -1 : sol[i]));
	
	return 0;
}