Cod sursa(job #1176323)

Utilizator cosgbCosmin cosgb Data 25 aprilie 2014 22:36:18
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <stdio.h>
#include <vector>
#include <queue>

using namespace std;

void bfs(vector<vector<long> > &lista_ad, vector<long> &visited, int source) {
	queue<long> q;
	long node, neighbour, distance;
	visited[source] = 0;
	q.push(source);
	while (q.size() != 0) {
		node = q.front();
		q.pop();
		distance = visited[node] + 1;
		for (int i = 0; i < lista_ad[node].size(); i++) {
			neighbour = lista_ad[node][i];
			if (visited[neighbour] == -1) {
				q.push(neighbour);
				visited[neighbour] = distance;
			}
		}
	}
}


int main()
{
	freopen("bfs.in", "r", stdin);
	freopen("bfs.out", "w", stdout);
	long N, M, id1, id2, S;

	scanf("%ld%ld%ld", &N, &M, &S);

	vector<vector<long> > lista_ad(N + 1, vector<long>(0, 0));
	vector<long> visited(N + 1, -1);

	for (int i = 0; i < M; i++) {
		scanf("%ld%ld", &id1, &id2);
		lista_ad[id1].push_back(id2);
	}

	bfs(lista_ad, visited, S);

	for (int i = 1; i <= N; i++) {
		printf("%ld ", visited[i]);
	}
	return 0;
}