Cod sursa(job #527938)

Utilizator avram_florinavram florin constantin avram_florin Data 1 februarie 2011 16:00:01
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<cstdio>
#include<vector>

using namespace std;

int n,m,S,c[100005],viz[100005],g[100005];
vector <int> A[100005];

void citire()
{
	freopen("bfs.in" , "r" , stdin );
	freopen("bfs.out" , "w" , stdout );
	int i,x,y;
	scanf("%d%d%d" , &n , &m , &S);
	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();
}

void BFS(int nod)
{
	int i,p,u,x;
	for( i = 1 ; i <= n ; i++ )
		viz[i] = -1;
	p = u = 1;
	c[p] = nod;
	viz[nod] = 0;
	while( p <= u )
		{
			x = c[p];
			for( i = 0 ; i < g[x] ; i++ )
				if( viz[A[x][i]] == -1 )
					{
						c[++u] = A[x][i];
						viz[A[x][i]] = viz[x]+1;
					}
			p++;
		}
}

int main()
{
	citire();
	BFS(S);
	int i;
	for( i = 1 ; i <= n ; i++ )
		printf("%d " , viz[i]);
	printf("\n");
	return 0;
}