Cod sursa(job #261662)

Utilizator tvladTataranu Vlad tvlad Data 18 februarie 2009 17:24:40
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;

const int NMAX = 100000;

int n,m,s;
int d[NMAX];
vector<int> G[NMAX];

void bf ( int s ) {
	queue<int> Q;
	fill(d,d+n,-1);
	for (d[s] = 0, Q.push(s); !Q.empty(); Q.pop()) {
		for (vector<int>::iterator it = G[Q.front()].begin(); it != G[Q.front()].end(); ++it) {
			if (d[*it] == -1) {
				d[*it] = d[Q.front()] + 1;
				Q.push(*it);
			}
		}
	}
}

int main() {
	freopen("bfs.in","rt",stdin);
	freopen("bfs.out","wt",stdout);
	scanf("%d %d %d",&n,&m,&s);
	--s;
	for (int i = 0, a,b; i < m; ++i) {
		scanf("%d %d",&a,&b);
		--a; --b;
		G[a].push_back(b);
	}
	bf(s);
	for (int i = 0; i < n; ++i) {
		printf("%d ",d[i]);
	}
	printf("\n");
	return 0;
}