Cod sursa(job #2665950)

Utilizator TheSharkCristian-Andrei Ionescu TheShark Data 31 octombrie 2020 15:31:47
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include<fstream>
#include<vector>
#include<queue>
#define NMAX 100001

using namespace std;

ifstream in("bfs.in");

ofstream out("bfs.out");

vector<unsigned int> adjList[NMAX];
bool isVisited[NMAX];
int cost[NMAX];

void bfs(unsigned int startNode) {
	queue<unsigned int> q;

	q.push(startNode);
	isVisited[startNode] = true;

	while (!q.empty()) {
		int currentNode = q.front();
		q.pop();

		for (const auto& node : adjList[currentNode]) {
			if (!isVisited[node]) {
				isVisited[node] = true;
				q.push(node);
				cost[node] = cost[currentNode] + 1;
			}
		}
	}
}

void printResult(unsigned int N) {
	for (unsigned int i = 1; i <= N; ++i) {
		out << (isVisited[i] ? cost[i] : -1) << ' ';
	}
}

int main() {

	unsigned int N, M, S;

	in >> N >> M >> S;
	for (unsigned int i = 0; i < M; ++i) {
		unsigned int startNode, endNode;
		in >> startNode >> endNode;
		adjList[startNode].push_back(endNode);
	}

	bfs(S);
	printResult(N);

	return 0;
}