Cod sursa(job #369492)

Utilizator Bit_MasterAlexandru-Iancu Caragicu Bit_Master Data 28 noiembrie 2009 15:29:41
Problema BFS - Parcurgere in latime Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <cstdio>
#include <vector>

using namespace std;

const int N = 1<<17;

vector <int> vecin[N];


int coada [N];
int dist [N];

int n,s;

void citire()
{
	int m;
	int x,y;
	scanf("%d%d%d",&n,&m,&s);
	for (int i = 1; i <= m; ++i)
	{
		scanf("%d%d",&x,&y);
		vecin[x].push_back(y);
	}
}

void initializare_dist()
{
	for (int i = 1; i <= n; ++i)
		dist[i] = -1;
}

void calculare()
{
	coada[1] = s;
	dist[s] = 0;
	int p = 1, q = 1;
	int x,y;
	while (q >= p)
	{
		x = coada[p];
		for (int i = 0; i <= vecin[x].size() - 1; ++i)
		{
			y = vecin[x][i];
			if (dist[y] != -1)
				continue;
			coada[++q] = y;
			dist[y] = dist[x] + 1;
		}
		++p;
	}
}

void afisare()
{
	for (int i = 1; i <= n; ++i)
		printf("%d ",dist[i]);
}

int main()
{
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	citire();
	initializare_dist();
	calculare();
	afisare();
	return 0;
}