Cod sursa(job #741658)

Utilizator joli94Apostol Adrian Alexandru joli94 Data 26 aprilie 2012 18:08:36
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<cstdio>
#include<queue>
#include<vector>

using namespace std;

const int N = 1<<17 ; 

int d[N]  , n , m  , x , y , s;
vector <int> a[N];
queue <int> q;

void read()
{
	freopen ( "bfs.in" , "r" , stdin );
	freopen ( "bfs.out" , "w" , stdout );
	
	
	scanf ( "%d %d %d" , &n, &m , &s );
	
	for (int i=1  ; i<=m ; ++i )
	{
		scanf("%d%d" , &x , &y );
		a[x].push_back(y);
	}
	q.push(s);
}

void init()
{
	for(int i=0 ; i<N ; ++i)
		d[i] = -1;
}

void solve()
{
	d[s] = 0;
	
	while(!q.empty())
	{
		x = q.front();
		q.pop();
		for(size_t i=0 ; i<a[x].size() ; ++i )
		{
			y = a[x][i];
			if(d[y]==-1) 
			{
				d[y] = 1 + d[x];
				q.push(y);
			}
		}
	}
	
	for (int i=1 ; i<=n ; ++i )
		printf("%d " , d[i]);
}

int main()
{
	read();
	init();
	solve(); 
	return 0;
}