Cod sursa(job #833284)

Utilizator razvan9310FMI - Razvan Damachi razvan9310 Data 12 decembrie 2012 10:57:15
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <cstdio>
#include <vector>
#define maxn 100010
using namespace std;

int g[maxn], cost[maxn], que[maxn], pos;
vector<int> a[maxn];

void BFS(int nod)
{
	memset(cost, -1, sizeof(cost));
	int i, j;
	
	pos = 1;
	que[pos] = nod;
	cost[nod] = 0;
	
	for (i=1; i<=pos; ++i)
		for (j=0; j<g[que[i]]; ++j)
			if (cost[a[que[i]][j]] == -1)
			{
				que[++pos] = a[que[i]][j];
				cost[que[pos]] = 1 + cost[que[i]];
			}
}

int main()
{
	freopen("bfs.in", "r", stdin);
	freopen("bfs.out", "w", stdout);
	int n, m, start, i, x, y;
	
	scanf("%d%d%d", &n, &m, &start);
	for (i=1; i<=m; ++i)
	{
		scanf("%d%d", &x, &y);
		a[x].push_back(y);
	}
	for (i=1; i<=n; ++i)
		g[i] = a[i].size();
	
	BFS(start);
	
	for (i=1; i<=n; ++i)
		printf("%d ", cost[i]);
	
	return 0;
}