Cod sursa(job #932625)

Utilizator h2g2Ford Prefect h2g2 Data 29 martie 2013 08:17:22
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
#define nmax 100005
#define inf 1<<30
using namespace std;

vector <int> vecin[nmax];
queue <int> q;
int cost[nmax];

void bfs() {
	int curent;
	while(!q.empty()) {
		curent = q.front();
		q.pop();
		for(int i=0; i<vecin[curent].size(); i++) 
			if(cost[vecin[curent][i]]==inf) {
				cost[vecin[curent][i]] = cost[curent] + 1;
				q.push(vecin[curent][i]);
			}
	}
}

int main() {
	ifstream f("bfs.in");
	ofstream g("bfs.out");
	
	int n, a, b, s, m, i;

	f>>n>>m>>s;
	for(i=1; i<=n; i++) cost[i] = inf;
	cost[s] = 0;
	for(i=1; i<=m; i++) {
		f>>a>>b;
		vecin[a].push_back(b);
	}

	q.push(s);
	bfs();

	for(i=1; i<=n; i++) {
		if(cost[i] == inf) g<<"-1 ";
		else g<<cost[i]<<" ";
	}

	return 0;
}