Cod sursa(job #891440)

Utilizator harababurelPuscas Sergiu harababurel Data 25 februarie 2013 16:54:09
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>
#include <string.h>
#define nmax 100005
#define inf 1<<31 - 1
using namespace std;

vector <int> vecin[nmax];
queue <int> q;
int cost[nmax];
int n, m, s, x, y, urmator;


void bfs() {
	while(!q.empty()) {
		int curent = q.front();
		q.pop();

		for(int i=0; i<vecin[curent].size(); i++) {
			urmator = vecin[curent][i];
			if(cost[urmator] == inf) {
				cost[urmator] = cost[curent] + 1;
				q.push(urmator);
			}
		}

	}
}


int main() {
	ifstream f("bfs.in");
	ofstream g("bfs.out");

	f>>n>>m>>s;
	for(int i=1; i<=n; i++) cost[i] = inf;
	cost[s] = 0;

	for(int i=1; i<=m; i++) {
		f>>x>>y;
		vecin[x].push_back(y);
	}

	q.push(s);
	bfs();

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

	return 0;
}