Cod sursa(job #1096382)

Utilizator pulseOvidiu Giorgi pulse Data 1 februarie 2014 22:09:06
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;

#define NMAX 100003

int n, m, start;
int cost[NMAX];
bool used[NMAX];
vector <int> v[NMAX];
queue <int> q;

inline void read_data ()
{
	scanf ("%d %d %d", &n, &m, &start);
	for (int i = 1, a, b; i <= m; ++i)
	{
		scanf ("%d %d", &a, &b);
		v[a].push_back (b);
	}
}

void BFS (int s)
{
	q.push (s);
	used[s] = true;
	cost[s] = 0;
	while (!q.empty ())
	{
		int k = q.front ();
		q.pop ();
		for (vector <int> :: iterator it = v[k].begin (); it != v[k].end (); ++it)
		{
			if (!used[*it])
			{
				q.push (*it);
				used[*it] = true;
				cost[*it] = cost[k] + 1;
			}
		}
	}
}

inline void write_data ()
{
	for (int i = 1; i <= n; ++i)
	{
		if (used[i]) printf ("%d ", cost[i]);
		else printf ("-1 ");
	}
}

int main ()
{
	freopen ("bfs.in", "r", stdin);
	freopen ("bfs.out", "w", stdout);
	read_data ();
	BFS (start);
	write_data ();
	return 0;
}