Cod sursa(job #1045104)

Utilizator TwoOfDiamondsDaniel Alexandru Radu TwoOfDiamonds Data 30 noiembrie 2013 21:24:40
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

ofstream OUT("bfs.out");

struct node
{
	vector<int> vecini;
	bool vizitat = false;
	int cost = 0;
};

void bfs(node *noduri, int s, int n)
{
	queue<node*> coada;
	noduri[s].cost = 0;

	coada.push(&noduri[s]);

	while (coada.empty() == false)
	{
		node *first = coada.front();
		first->vizitat = true;
		coada.pop();

		for (vector<int>::const_iterator iter = first->vecini.begin(); iter != first->vecini.end(); iter++)
		{
			if (noduri[*iter].vizitat == false)
			{
				coada.push(&noduri[*iter]);
				noduri[*iter].cost = first->cost + 1;
			}
		}


	}

	for (int i = 1; i <= n; i++)
	{
		if (noduri[i].vizitat)
			OUT << noduri[i].cost << " ";
		else
			OUT << "-1 ";
	}

	OUT << endl;
}

int main()
{
	ifstream IN("bfs.in");

	int n, m, s; IN >> n >> m >> s;

	node* noduri = new node[n+1];

	for (int i = 0; i < m; i++)
	{
		int x; IN >> x; int y; IN >> y;

		noduri[x].vecini.push_back(y);
	}

	bfs(noduri, s, n);

	return 0;
}