Cod sursa(job #1416258)

Utilizator diac_paulPaul Diac diac_paul Data 7 aprilie 2015 19:25:21
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <stdio.h>
#include <vector>
#define NMax 100001

using namespace std;
int n, m, s;
vector<int> v[NMax];

int dist[NMax];

FILE *fin = fopen("bfs.in", "rt");
FILE *fout = fopen("bfs.out", "wt");

int c[NMax], in, sf;

int main() {
	fscanf(fin, "%d %d %d", &n, &m, &s);
	int x, y;
	for (int i = 0; i < m; i++) {
		fscanf(fin, "%d %d", &x, &y);
		v[x].push_back(y);
	}

	for (int i = 1; i <= n; i++) {
		dist[i] = -1;
	}

	in = sf = 0;
	c[0] = s;
	dist[s] = 0;

	while (in <= sf) {

		// procesez nodul c[in]

		int nod = c[in];
		for (int i = 0; i < v[nod].size(); i++) if (dist[v[nod][i]] == -1) {
			sf++;
			c[sf] = v[nod][i];

			dist[v[nod][i]] = dist[nod] + 1;
		}
		in++;
	}

	for (int i = 1; i <= n; i++) {
		fprintf(fout, "%d ", dist[i]);
	}
	return 0;
}