Cod sursa(job #675935)

Utilizator raduzerRadu Zernoveanu raduzer Data 8 februarie 2012 14:38:45
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

#define pb push_back
#define forit(it, v) for(__typeof(v.begin()) it = v.begin(); it != v.end(); ++it)

const int MAX_N = 100001;
const int INF = 0x3f3f3f3f;

int n, m, sursa;
int d[MAX_N], q[2 * MAX_N];
vector <int> v[MAX_N];

void bfs(int nod)
{
	int i, j, l, r;
	
	q[l = r = 1] = nod;
	
	for (; l <= r; ++l)
		forit(it, v[q[l]])
			if (d[*it] > d[q[l]] + 1)
			{
				d[*it] = d[q[l]] + 1;
				q[++r] = *it;
			}
}

int main()
{
	freopen("bfs.in", "r", stdin);
	freopen("bfs.out", "w", stdout);
	
	scanf("%d %d %d\n", &n, &m, &sursa);
	
	for (int i = 1; i <= m; ++i)
	{
		int x, y;
		
		scanf("%d %d", &x, &y);
		
		v[x].pb(y);
	}
	
	memset(d, INF, sizeof(d));
	
	d[sursa] = 0;
	
	bfs(sursa);
	
	for (int i = 1; i <= n; ++i)
		printf("%d ", (d[i] != INF) ? d[i] : -1);
}