Cod sursa(job #1698977)

Utilizator andreibotilaBotila Andrei andreibotila Data 5 mai 2016 19:15:09
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <string.h>

using namespace std;
const int NMax = 100003;

int N, M, S, d[NMax];


ifstream fin ("bfs.in");
ofstream fout("bfs.out");


void BFS(int s, std::vector<int> const (&graf)[NMax]) {
	int visited[NMax];
	int d[NMax];
	memset(d, -1, sizeof(d));
	memset(visited, 0, sizeof(visited));
	queue <pair<int, int> > q;
	q.push(pair<int, int>(s, 0));
	visited[s] = 1;

	

	while (!q.empty()) {
		int id = q.front().first;
		d[id] = q.front().second;
		q.pop();

		int nrVecini = graf[id].size();
		for (int i = 0; i < nrVecini; i++) {
			int idVecin = graf[id][i];
			if (visited[idVecin] == 0) {
				q.push(pair<int, int>(idVecin, d[id] + 1));
				visited[idVecin] = 1;
			}
		}
	}

	for (int j = 0; j < N; j++) {
		if (j == s) {
			d[j] = 0;
		}
		fout << d[j] << " ";
	}
}

int main() {
	int x, y;
	
    fin >> N >> M >> S;
	vector<int> graf[NMax];
	
	for (int i = 0; i < M; i++) {
		fin >> x >> y;
		graf[x - 1].push_back(y - 1);	
	}

	BFS(S - 1, graf);

	return 0;
}