Cod sursa(job #1459096)

Utilizator aimrdlAndrei mrdl aimrdl Data 9 iulie 2015 02:35:07
Problema BFS - Parcurgere in latime Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <string.h>

#define MAX 100000
#define TRUE 1
#define FALSE 0

using namespace std;

typedef struct {
	int n;
	vector <vector <int> > V;
} Graph;

Graph G;
int d[MAX], S;
bool found[MAX];

void read() {
	int m;
	cin >> G.n >> m >> S;
	
	for (int i = 0; i <= G.n; ++i) {
		vector <int> v;
		G.V.push_back(v);
	}
	
	for (int i = 0; i < m; ++i) {
		int x, y;
		cin >> x >> y;
		G.V[x].push_back(y);
	}
}

void bfs() {
	queue <int> Q;
	Q.push(S);
	
	memset(d, -1, G.n * sizeof(int));
	memset(found, FALSE, G.n);
	
	d[S] = 0;
	found[S] = TRUE;
	
	while (!Q.empty()) {
		int curr = Q.front();
		
		for (unsigned int i = 0; i < G.V[curr].size(); ++i) {
			//if node is not found then fill in distance and add to queue
			if (!found[G.V[curr][i]]) {
				found[G.V[curr][i]] = TRUE;
				d[G.V[curr][i]] = d[curr] + 1;
				Q.push(G.V[curr][i]);
			}				
		}
		
		Q.pop();
	}
} 
		


int main (void) {
	freopen("bfs.in", "r", stdin);
	freopen("bfs.out", "w", stdout);
	
	read();
	bfs();
	
	for (int i = 1; i <= G.n; ++i) {
		cout << d[i] << " ";
	}
	
	return 0;
}