Cod sursa(job #675827)

Utilizator damgoodLincan Dan damgood Data 8 februarie 2012 12:23:53
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <cstdio>
#include <climits>

#include <queue>
#include <vector>

#define MAXN 100001

using namespace std;

int n, m, s;
vector<int> g[ MAXN ];
bool visited[ MAXN ];
int d[ MAXN ] = { INT_MAX }; //TODO why it doesn't work

void read()
{
	freopen("bfs.in","r",stdin);
	freopen("bfs.out", "w", stdout);

	scanf("%d%d%d", &n, &m, &s);

	for(int i = 1; i <= n; ++i)
	{
		d[i] = INT_MAX;
		g[i].push_back(0);
	}
	
	for(int i = 1; i <= m; ++i)
	{
		int u, v;
		scanf("%d%d", &u, &v);
		g[ u ].push_back( v );
	}
}

void bfs(int s)
{
	queue<int> Q;
	d[s] = 0;
	Q.push(s);
	
	while( !Q.empty() )
	{
		int u = Q.front(); Q.pop();
		visited[u] = true;
		for(size_t i = 1; i < g[u].size(); ++i)
		{
			if( d[u] + 1 < d[ g[u][i] ] )
			{
				d[ g[u][i] ] = d[u] + 1;
				Q.push( g[u][i] );
			}
		}
	}
}

void solve()
{
	bfs(s);
}

void printResult()
{
	for(int i = 1; i <= n; ++i)
		(d[i] != INT_MAX) ? printf("%d ", d[i]) : printf("%d ", -1);
	printf("\n");
}

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