Cod sursa(job #1278763)

Utilizator MarronMarron Marron Data 29 noiembrie 2014 13:24:42
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
#include <queue>


typedef std::vector<int>::iterator iter;


std::ifstream f("bfs.in");
std::ofstream g("bfs.out");

const int MAXN = 100005;
const int INF = 0x3f3f3f3f;
int n;
std::vector<int> G[MAXN];
int dist[MAXN];
std::bitset<MAXN> viz;
std::queue<int> q;


void bfs(int nod, int *dist)
{
	dist[nod] = 1;
	viz[nod] = true;

	q.push(nod);
	while (!q.empty()) {
		int nd = q.front();
		q.pop();

		for (iter it = G[nd].begin(); it != G[nd].end(); it++) {
			if (!viz[*it]) {
				q.push(*it);
				viz[*it] = true;
				dist[*it] = dist[nd] + 1;
			}
		}
	}
	for (int i = 1; i <= n; i++) {
		dist[i] -= 1;
	}
}


int main()
{
	int m, s;
	f >> n >> m >> s;
	for (int i = 1, x, y; i <= m; i++) {
		f >> x >> y;

		G[x].push_back(y);
	}

	bfs(s, dist);

	for (int i = 1; i <= n; i++) {
		g << dist[i] << ' ';
	}
	g << std::endl;
}