Cod sursa(job #1339398)

Utilizator IulianBoboUAIC Boboc Iulian IulianBobo Data 10 februarie 2015 21:13:06
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

#define MAX_N 100005
#define INF 1<<30

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

int viz[MAX_N], dist[MAX_N],Q[MAX_N], n, m, s;

vector<int> el[MAX_N];


void readData()
{
	int i, a, b;
	f >> n >> m >> s;
	for (i = 1; i <= m; i++)
	{
		f >> a >> b;
		el[a].push_back(b);
	}
}


void compute()
{
	int p = 1, u = 1;

	Q[p] = s;

	for (int i = 1; i <= n; i++) dist[i] = INF;

	dist[s] = 0;

	while (u<=p)
	{
		int nod = Q[u];
		viz[nod] = 1;
		for (vector<int>::iterator it=el[nod].begin(); it!=el[nod].end(); it++)
		{
			if (dist[*it] == INF)
			{
				Q[++p] = *it;
				dist[*it] = dist[nod] + 1;
			}
		}
		++u;
	}
}

int main()
{
	readData();
	compute();
	for (int i = 1; i <= n; i++) g << ((dist[i]!=INF)?dist[i]:-1) << " ";
	f.close();
	g.close();
}