Cod sursa(job #390603)

Utilizator hulparuadrianhulparu adrian hulparuadrian Data 4 februarie 2010 02:53:46
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<stdio.h>
#include<vector>
using namespace std;
#define SIZE 100001
vector<int> graf[SIZE];
int n, m, s, x, y, l, cost[SIZE], coada[SIZE], nrvecini[SIZE];

int main()
{
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	scanf("%d %d %d", &n, &m, &s);
	int i, j;
	for(i = 1; i <= m; i++)
	{
		scanf("%d %d", &x, &y);
		graf[x].push_back(y);
	}
	fclose(stdin);
	
	for(i = 1; i <= n; i++)
		nrvecini[i] = graf[i].size();
	
	//BFS algorithm
	memset(cost, -1, sizeof(cost));
	cost[s] = 0;
	l = 1;
	coada[l] = s;
	for(i = 1; i <= l; i++)
		for(j = 0; j < nrvecini[coada[i]]; j++)
			if (cost[graf[coada[i]][j]] == -1)
			{
				coada[++l] = graf[coada[i]][j];
				cost[coada[l]] = cost[coada[i]] + 1;
			}
	
	for(i = 1; i <= n; i++)
		printf("%d ", cost[i]);

	fclose(stdout);
	return 0;
}