Cod sursa(job #1698927)

Utilizator andreibotilaBotila Andrei andreibotila Data 5 mai 2016 17:50:52
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <string.h>

using namespace std;
const int NMax = 100003;

int N, M, S, d[NMax];
vector<int> graf[NMax];
bool visited[NMax];

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


void BFS(int s) {
	queue <pair<int, int> > q;
	q.push(pair<int, int>(s, 0));
	visited[s] = true;

	memset(d, -1, sizeof(d));

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

		int nrVecini = graf[id].size();
		for (int i = 0; i < nrVecini; i++) {
			int idVecin = graf[id][i];
			if (!visited[idVecin]) {
				q.push(pair<int, int>(idVecin, d[id] + 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;
	
	for (int i = 0; i < M; i++) {
		fin >> x >> y;
		graf[x - 1].push_back(y - 1);	
	}

	BFS(S - 1);

	return 0;
}