Cod sursa(job #3158309)

Utilizator Dragos13Dragos Dragos13 Data 18 octombrie 2023 12:17:54
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <algorithm>
#include <vector>
#include <fstream>
#include <queue>
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
void construire(vector<vector<int>>& ls, int n, int m, int s) {

	for (int i = 0; i < m; i++)
	{
		int x, y;
		in >> x >> y;
		ls[x].push_back(y);

	}

}

void afisare(vector<vector<int>>ls) {
	for (int i = 1; i < ls.size(); i++)
	{
		cout << i << ": ";
		for (int j = 0; j < ls[i].size(); j++)
		{
			cout << ls[i][j] << " ";
		}
		cout << "\n";
	}
}

int vizitat[100000],adancime[100000];
void parcurgere(vector<vector<int>>ls, int s) {
	queue<int>q;
	q.push(s);
	vizitat[s] = 1;
	adancime[s] = 0;
	while (q.empty() != 1) {
		s = q.front();
		q.pop();
		for (int i = 0; i < ls[s].size(); i++)
		{
			if (vizitat[ls[s][i]] == 0) {
				vizitat[ls[s][i]] = 1;
				adancime[ls[s][i]] = adancime[s] + 1;
				q.push(ls[s][i]);
			}
		}

	}

}


int main() {

	
	int n, m, s;
	in >> n >> m >> s;
	vector<vector<int>>ls(n + 1);

	construire(ls, n, m, s);
	
	parcurgere(ls,s);
	for (int i = 1; i <=n; i++)
	{
		if (adancime[i] == 0 && i != s)
			adancime[i] = -1;
		out << adancime[i]<<" ";
	}
}