Cod sursa(job #390610)

Utilizator hulparuadrianhulparu adrian hulparuadrian Data 4 februarie 2010 09:46:25
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<stdio.h>
#include<vector>
#include<queue>
using namespace std;
#define SIZE 100001

int N, M, S;
vector <int> graf[SIZE];
queue <int> coada;
int color[SIZE], d[SIZE], pred[SIZE], nrvecini[SIZE];

int main()
{
	int i, x, y, u, v;
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	scanf("%d %d %d", &N, &M, &S);
	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();

	//parcurgere in latime
	memset(d, -1, sizeof(d));
	color[S] = -1;
	d[S] = 0;
	coada.push(S);
	while(coada.size())
	{
		u = coada.front();
		for( i = 0; i < nrvecini[u]; i++)
		{
			v = graf[u][i];
			if (color[v] == 0)
			{
				color[v] = -1;
				d[v] = d[u] + 1;
				pred[v] = u;
				coada.push(v);
			}
		}
		coada.pop();
		color[u] = -2;
	}
	
	for(i = 1; i <= N; i++)
		printf("%d ", d[i]);

	fclose(stdout);
	return 0;
}