Cod sursa(job #993610)

Utilizator diac_paulPaul Diac diac_paul Data 4 septembrie 2013 10:36:06
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <stdio.h>
#include <vector>
#define NMax 100005
#define INF 1000000

using namespace std;

int n, s;
vector<int> v[NMax];

int in, sf, c[NMax];

int dmin[NMax];


int main()
{
	freopen("bfs.in", "r", stdin);
	freopen("bfs.out", "w", stdout);

	int m;

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

	while (m--)
	{
		int x, y;
		scanf("%d %d", &x, &y);

		v[x].push_back(y);
	}

	for (int i = 1; i <= n; i++)
		dmin[i] = INF;

	dmin[s] = 0;
	in = sf = 0;
	c[0] = s;

	while (in <= sf)
	{
		for (int i = 0; i < v[c[in]].size(); i++)
		{
			if (dmin[v[c[in]][i]] > dmin[c[in]] + 1)
			{
				dmin[v[c[in]][i]] = dmin[c[in]] + 1;
				c[++sf] = v[c[in]][i];
			}
		}
		in++;
	}

	for (int i = 1; i <= n; i++)
	{
		if (dmin[i] == INF)
			printf("-1 ");
		else
			printf("%d ", dmin[i]);
	}

	printf("\n");

	return 0;
}