Cod sursa(job #1245234)

Utilizator danny794Dan Danaila danny794 Data 18 octombrie 2014 19:44:30
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <cstdio>
#include <vector>
#include <queue>

#define NMAX 100005

using namespace std;

int N, M, S;
vector<int> v[NMAX];
int dist[NMAX];

void read()
{
	freopen("bfs.in", "r", stdin);
	freopen("bfs.out", "w", stdout);
	scanf("%d%d%d", &N, &M, &S);
	int x, y;
	for(int i = 1; i <= M; i++)
	{
		scanf("%d%d", &x, &y);
		v[x].push_back(y);
	}
	for(int i = 1; i <= N; i++)
		dist[i] = N;
}

void bfs()
{
	queue<int> q;
	q.push(S);
	dist[S] = 0;
	while(!q.empty())
	{
		int x = q.front();
		q.pop();
		for(unsigned int i = 0; i < v[x].size(); i++)
			if(dist[v[x][i]] > dist[x] + 1)
			{
				dist[v[x][i]] = dist[x]+1;
				q.push(v[x][i]);
			}
	}
}

void printSolution()
{
	for(int i = 1; i <= N; i++)
		printf("%d ", dist[i] == N ? -1 : dist[i]);
}

int main() {
	read();
	bfs();
	printSolution();
	return 0;
}