Cod sursa(job #362800)

Utilizator andrei.sfrentSfrent Andrei andrei.sfrent Data 11 noiembrie 2009 00:11:08
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <stdio.h>
#include <vector>
#include <queue>

using namespace std;

#define N 100000

vector<int> g[N + 1];
int n, m, s;

queue<int> q;
int d[N + 1];

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

void bfs()
{
	int e;
	for(int k = 1;  k <= n; ++k) d[k] = -1;
	d[s] = 0;
	q.push(s);
	vector<int> :: iterator i;
	while(!q.empty())
	{
		e = q.front();
		q.pop();
		for(i = g[e].begin(); i != g[e].end(); ++i)
		{
			if(d[*i] == -1)
			{
				d[*i] = d[e] + 1;
				q.push(*i);
			}
		}
	}
}

void scrie()
{
	for(int k = 1; k <= n; ++k) printf("%d ", d[k]);
	printf("\n");
}

int main()
{
	freopen("bfs.in", "r", stdin);
	freopen("bfs.out", "w", stdout);
	
	citeste();
	bfs();
	scrie();
	
	return 0;
}