# PBinfo #19 – bfs – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

Se consideră un graf neorientat cu n vârfuri și m muchii și de asemenea un vârf X.

Cerinţa
Să se afișeze vârfurile vizitate în urma parcurgerii în lățime (Breadth First Search) a grafului, pornind din vârful X.

Date de intrare
Fişierul de intrare BFS.in conţine pe prima linie trei numere naturale n m X, având următoarea semnificație: n este numărul de noduri, m este numărul de muchii din graf, iar X este vârful din care se începe parcurgerea. Următoarele m linii conțin câte două numere x y cu semnificația că există muchie între x și y .

Date de ieşire
Fişierul de ieşire BFS.out va conţine pe prima linie vârfurile vizitate în urma parcurgerii în lățime a grafului, aceasta începând din vârful X.

Restricţii şi precizări

2 ≤ n ≤ 100
1 ≤ m ≤ n*(n-1)/2
Graful poate sa nu fie conex!!!
dacă în timpul parcurgerii, la un moment dat vârful curent al grafului este Y, vecinii nevizitați ai lui Y se vor analiza în ordine crescătoare.

Exemplu:
BFS.in

5 7 2
1 2
3 2
1 5
2 4
3 1
4 5
5 3 
BFS.out

2 1 3 4 5

## Cod sursă C++

```cpp
#include <bits/stdc++.h>
using namespace std; 
ifstream in("BFS.in");
ofstream out("BFS.out");
int n, m, x, i, j, a[105][105], viz[105], c[105], p, u, v1, v2;
int main() {
  in >> n >> m >> x;
  for (i = 1; i <= m; i++) {
	in >> v1 >> v2;
	a[v1][v2] = a[v2][v1] = 1;
  } p = 1; u = 1; c[p] = x; viz[x] = 1;
  while (p <= u) {
	for (i = 1; i <= n; i++)
	  if (a[c[p]][i] == 1 && viz[i] == 0) {
		u++; c[u] = i; viz[i] = 1;
	  } p++;
  } for (i = 1; i <= u; i++) out << c[i] << " ";
  return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/19)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/19/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-19/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
