Cod sursa(job #2668604)

Utilizator tudoranita112Tudor Anita tudoranita112 Data 5 noiembrie 2020 03:49:48
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

#define maxn 100010

int N, M, L, Start;
vector <int> varfuri[maxn];
int G[maxn], que_nodes[maxn], visited[maxn];

void BFS(int nod)
{
	int i, j;

	for (i = 1; i <= N; i++)
		visited[i] = -1;//	Marchez toate nodurile ca fiind nevizitate

	//	Introduc nodul de start in coada
	L = 1;
	visited[nod] = 0;
	que_nodes[L] = nod;

	for (i = 1; i <= L; i++)	//	Elimin pe rand nodurile din coada
		for (j = 0; j < G[que_nodes[i]]; j++)	//	Parcurg vecinii nodului ce urmeaza sa fie eliminat
			if (visited[varfuri[que_nodes[i]][j]] == -1)
			{
				//	Adaug vecinii nevizitati in coada si le calculez distanta
				que_nodes[++L] = varfuri[que_nodes[i]][j];
				visited[que_nodes[L]] = visited[que_nodes[i]] + 1;
			}
}

void read_data_bfs() {
	ifstream bfs_in;
	bfs_in.open("bfs.in");

	int i, x, y;
	bfs_in >> N >> M >> Start;

	//	Citesc arcele si retin graful sub forma de lista de vecini

	for (i = 1; i <= M; i++)
	{
		bfs_in >> x >> y;
		varfuri[x].push_back(y);
	}

	for (i = 1; i <= N; i++)
		G[i] = varfuri[i].size();
}

void show_result() {

	ofstream bfs_out;
	bfs_out.open("bfs.out");
	int i;
	for (i = 1; i <= N; i++)
	{
		bfs_out << visited[i] << " ";
	}

}

int main()
{
	
	
	read_data_bfs();
	
	BFS(Start);

	show_result();

	return 0;
}