Cod sursa(job #613898)

Utilizator alexdmotocMotoc Alexandru alexdmotoc Data 5 octombrie 2011 00:11:03
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

#define MaxN 100005

int N , M , S , cost[MaxN];
bool viz[MaxN];


int main ()
{
	freopen ("bfs.in" , "r" , stdin);
	freopen ("bfs.out" , "w" , stdout);
	
	vector <int> lista[MaxN];
	queue <int> coada;
	
	int x , y , nod;
	
	
	scanf ("%d %d %d" , &N , &M , &S);
	
	for (int i = 1 ; i <= M ; ++i)
	{
		scanf ("%d %d" , &x , &y);
		
		lista[x].push_back (y);
	}
	
	coada.push (S);
	viz[S] = 1;
	cost[S] = 0;
	
	while (!coada.empty ())
	{
		
		nod = coada.front ();
		
		for (unsigned i = 0 ; i < lista[nod].size () ; ++i)
			if ( !viz[lista[nod][i]] )
			{
				coada.push (lista[nod][i]);
				cost[lista[nod][i]] = cost[nod] + 1;
			}
		
		coada.pop ();
	}
	
	for (int i = 1 ; i <= N ; ++i)
		if (cost[i] == 0 && i != S)
			printf ("%d " , -1);
		
		else
			printf ("%d " , cost[i]);
	
	return 0;
}