Cod sursa(job #1339335)

Utilizator IulianBoboUAIC Boboc Iulian IulianBobo Data 10 februarie 2015 20:38:15
Problema BFS - Parcurgere in latime Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>
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;

struct graph
{
	int nod;
	graph * next;
};

graph *el[MAX_N];


void add(int a, int b)
{
	graph * q = new graph;
	q->nod = b;
	q->next = el[a];
	el[a] = q;
}


void readData()
{
	int i, a, b;
	f >> n >> m >> s;
	for (i = 1; i <= m; i++)
	{
		f >> a >> b;
		add(a, b);
	}
}


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

	viz[s] = 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 (graph *q = el[nod]; q; q = q->next)
		{
			if (!viz[q->nod])
			{
				Q[++p] = q->nod;
			}
			if (dist[q->nod] > dist[nod] + 1)
			{
				dist[q->nod] = 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();
}