Cod sursa(job #1698916)

Utilizator andreibotilaBotila Andrei andreibotila Data 5 mai 2016 17:40:45
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <queue>

using namespace std;
const int NMax = 100003;

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

FILE *in = fopen("bfs.in", "r");
FILE *out = fopen("bfs.out", "w");
	

void BFS(int s) {
	printf("s = %d\n", s);
	queue <pair<int, int> > q;
	q.push(pair<int, int>(s, 0));
	visited[s] = true;

	for (int i = 0; i < N; i++) {
		d[i] = -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]) {
				q.push(pair<int, int>(idVecin, d[id] + 1));
			}
		}
	}

	for (int j = 0; j < N; j++) {
		if (j == s) {
			d[j] = 0;
		}
		fprintf(out, "%d ", d[j]);
	}
}

int main() {
	int x, y;
	
	fscanf(in, "%d %d %d", &N, &M, &S);
	
	for (int i = 0; i < M; i++) {
		fscanf(in, "%d %d", &x, &y);
		graf[x - 1].push_back(y - 1);	
	}

	BFS(S - 1);

	fclose(in);
	fclose(out);
	return 0;
}