Cod sursa(job #677484)

Utilizator Catah15Catalin Haidau Catah15 Data 10 februarie 2012 11:46:38
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <vector>
#include <queue>

using namespace std;

#define maxN 100005
#define PB push_back

int cost[maxN], N;
bool cont[maxN];
vector <int> list[maxN];
queue <int> Q;


void bfs (int nod)
{
	for (int i = 0; i <= N; ++ i) cost[i] = - 1;
	cost[nod] = 0;
	
	Q.push (nod);
	cont[nod] = true;
	
	while (! Q.empty ())
	{
		int node = Q.front();
		Q.pop();
		
		for (unsigned int i = 0; i < list[node].size(); ++ i)
		{
			int node2 = list[node][i];
			
			if (cont[node2]) continue;
			
			cost[node2] = cost[node] + 1;
			
			cont[node2] = true;
			Q.push (node2);
		}
	}
}


int main()
{
	freopen ("bfs.in", "r", stdin);
	freopen ("bfs.out", "w", stdout);
	
	int M, S;
	
	scanf ("%d %d %d", &N, &M, &S);
	
	while (M --)
	{
		int a, b;
		
		scanf ("%d %d", &a, &b);
		
		list[a].PB (b);
	}
	
	bfs (S);
	
	for (int i = 1; i <= N; ++ i) printf ("%d ", cost[i]);
	
	return 0;
}