Cod sursa(job #3318527)

Utilizator r0scatRosca Teodora Maia r0scat Data 28 octombrie 2025 13:04:45
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.08 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
#include <queue>
using namespace std;

ifstream fin("bfs.in");
ofstream fout("bfs.out");

// BFS
// BFS(s)
// s[1] = infinit;
// s[start] = 0
// q.push(start)
// while !Q.empty()
//		nod = Q.front()
//

int d[100001]; // distanta
vector<int> l[100001]; // lista muchii
queue<int> q;
int n, m;


void bfs(int start) {
	for (int i = 1; i <= n; i++)
		d[i] = -1;

	d[start] = 0;
	q.push(start);
	while (!q.empty()) {
		int nod = q.front();
		q.pop();
		for (auto vecin : l[nod]) {
			if (d[vecin] == -1) {
				d[vecin] = d[nod] + 1;
				q.push(vecin);
			}
		}
	}
	for (int i = 1; i <= n; i++)
		fout << d[i] << " ";
}

int main() {
	int x, y, s;
	fin >> n >> m >> s;
	for (int i = 1; i <= m; i++)
	{
		fin >> x >> y;
		l[x].push_back(y); // graf orientat
	}
	//cout << n << m << s;
	bfs(s);
}
















// parcurgerile in grafuri --> DFS si BFS
// componente tare conexe


// parcurgerea DFS
// 
// DFS(nod)
// vizitat[nod] = 1
// iteram prin toti vecinii nodului si ii marcam vizitat
// for vecin in L[nod] (lista de adiacenta)
//		if vizitat[vecin] == 0
//			DFS(vecin)
//
// pt a descoperii nr comp conexe
// for (i = 1; i <= n; i++)
//		if (vizitat[nod] == 0)
//			DFS(nod);
//			nrCompConexe++;
//

//
//
//int vizitat[100001];
//vector<int> L[100001];
//
//
//void dfs(int nod) {
//	vizitat[nod] = 1;
//	for (int vecin : L[nod]) {
//		if (vizitat[vecin] == 0)
//			dfs(vecin);
//	}
//}
//
//int main()
//{
//	int n, m, x, y, nrCompConex = 0;
//	fin >> n >> m;
//	for (int i = 1; i <= m; i++) {
//		fin >> x >> y;
//		L[x].push_back(y);
//		L[y].push_back(x);
//	}
//
//
//	/*for (int i = 1; i <= n; i++)
//	{
//		cout << "nodul " << i << " are vecinii: ";
//		for (int j = 0; j < L[i].size(); j++)
//			cout << L[i][j] << " ";
//		cout << "\n";
//	}*/
//
//	for (int i = 1; i <= n; i++)
//		if (vizitat[i] == 0) {
//			dfs(i);
//			nrCompConex++;
//		}
//
//	fout << nrCompConex << '\n';
//	return 0;
//}
//