Cod sursa(job #1182122)

Utilizator MarianMMorosac George Marian MarianM Data 4 mai 2014 21:18:10
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;

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

#define DMAX 100001
#define INF -1

struct Graph{
	char inf[DMAX];		// content
	char color[DMAX];	// w->g->b
	int p[DMAX], d[DMAX];	// p = parent, d = distance
	vector<int> Adj[DMAX];	// Adj list
	vector<pair<int, int>> Edge;
} G;

int n, m;
queue<int> Q;

void BFS(int r){
	int son, lg, i, next;

	for (i = 1; i <= n; i++) {
		G.color[i] = 'w';
		G.d[i] = INF;
		G.p[i] = 0;
	}

	G.color[r] = 'g';
	G.d[r] = 0;
	Q.push(r);

	while (!Q.empty()){
		son = Q.front(); Q.pop();
		lg = G.Adj[son].size();
		for (i = 0; i < lg; i++){
			next = G.Adj[son][i];
			if (G.color[next] == 'w'){
				G.color[next] = 'g';
				G.d[next] = G.d[son] + 1;
				G.p[next] = son;
				Q.push(next);
			}
		}
		G.color[son] = 'b';
	}
}

int main(){
	int i, ui, vi, source;

	fin >> n >> m >> source;
	for (i = 0; i < m; i++) {
		fin >> ui >> vi;
		G.Adj[ui].push_back(vi);
		G.Edge.push_back(make_pair(ui, vi));
	}

	BFS(source);

	for (i = 1; i <= n; i++)	fout << G.d[i] << ' ';
	
	return 0;
}