Cod sursa(job #2699265)

Utilizator sorinnsgNeculae Andrei-Sorin sorinnsg Data 23 ianuarie 2021 23:50:31
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>

#define NMAX 100010
using namespace std;

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

vector<int>		listaArce[NMAX];
int				n, m, s;
queue<int>			coadaNoduri;
int				costuri[NMAX];

void	bfs(int	nodStart)
{
	coadaNoduri.push(nodStart);
	costuri[coadaNoduri.front()] = 0;
	
	while (!coadaNoduri.empty())
	{
		for (int i = 0; i < listaArce[coadaNoduri.front()].size(); i++)
		{
			if (costuri[listaArce[coadaNoduri.front()][i]] == -1)
			{
				costuri[listaArce[coadaNoduri.front()][i]] = costuri[coadaNoduri.front()] + 1;
				coadaNoduri.push(listaArce[coadaNoduri.front()][i]);
			}
		}
		coadaNoduri.pop();
	}
	
	for (int i = 1; i <= n; i++)
		g << costuri[i] << ' ';
}

// https://www.infoarena.ro/problema/bfs
// https://www.infoarena.ro/job_detail/2660637
int		main()
{
	f >> n >> m >> s;
	
	for (unsigned int i = 0; i < m; i++)
	{
		int nodS, nodD;
		f >> nodS >> nodD;
		listaArce[nodS].push_back(nodD);
	}
	memset(costuri, -1, sizeof(costuri));  
	
	bfs(s);
	return 0;
}