Írj szélességi bejárást (BFS) c++ kódon!
Íme egy példa a szélességi bejárás megvalósítására C++ kódon, amely szomszédsági listát használ a gráf ábrázolására: <br> <br> ``` <br> #tartalmaz <iostream> <br> #tartalmaz <sor> <br> #tartalmaz <vektor > <br> <br> névtér használata; <br> <br> üres szélességi bejárás(vektor<vektor<egész szám>>& gráf, egész szám kezdése) { <br> egész szám n = grafikon.méret(); <br> vektor<két lehetőség> látogatott(n, hamis); <br> sor<egész szám> q; <br> q.nyom(kezdés); <br> látogatott[kezdés] = igaz; <br> <br> mialatt (!q.üres()) { <br> egész szám csomópont = q.eleje(); <br> q.pontrólpontra(); <br> <br> // Csinálj valamit a csomóponttal (pl. nyomtatás) <br> szabványos kimeneti eszköz << csomópont << " "; <br> <br> valamihez (egész szám szomszéd : gráf[csomópont]) { <br> ha (!látogatott[szomszéd]) { <br> q.nyom(szomszéd); <br> látogatott[szomszéd] = igaz; <br> } <br> } <br> } <br> } <br> <br> egész szám paraméter nélkül() { <br> egész szám n, m; // n = csomópontok száma, m = élek száma <br> vállalati azonosítószám >> n >> m; <br> <br> // Grafikon készítése <br> vektor<vektor<egész szám>> gráf(n); <br> valamihez (egész szám i = 0; i < m; i++) { <br> egész szám a, b; <br> vállalati azonosítószám >> a >> b; <br> // Él hozzáadása a-ból b-be <br> gráf[a].nyom_vissza(b); <br> // Él hozzáadása b-ből a-ba, ha nem irányított <br> // gráf[b].nyom_vissza(a); <br> } <br> <br> // szélességi bejárás végrehajtása a 0. csomóponttól kezdve <br> szélességi bejárás(gráf, 0); <br> <br> 0 visszatérés; <br> } <br> ``` <br> <br> Ez a megvalósítás a felhasználó által megadott `n`-t (csomópontok száma) és `m`-t (élek száma) értékeket veszi be, létrehozza a gráf szomszédsági listáját, s a 0. csomópontból kiindulva szélességi bejárást hajt végre. A szélességi bejárás során a csomópontok a meglátogatási sorrendben kerülnek kinyomtatásra.
### Utasítás:
Írj szélességi bejárást (BFS) c++ kódon!


### Válasz:
Íme egy példa a szélességi bejárás megvalósítására C++ kódon, amely szomszédsági listát használ a gráf ábrázolására: <br> <br> ``` <br> #tartalmaz <iostream> <br> #tartalmaz <sor> <br> #tartalmaz <vektor > <br> <br> névtér használata; <br> <br> üres szélességi bejárás(vektor<vektor<egész szám>>& gráf, egész szám kezdése) { <br> egész szám n = grafikon.méret(); <br> vektor<két lehetőség> látogatott(n, hamis); <br> sor<egész szám> q; <br> q.nyom(kezdés); <br> látogatott[kezdés] = igaz; <br> <br> mialatt (!q.üres()) { <br> egész szám csomópont = q.eleje(); <br> q.pontrólpontra(); <br> <br> // Csinálj valamit a csomóponttal (pl. nyomtatás) <br> szabványos kimeneti eszköz << csomópont << " "; <br> <br> valamihez (egész szám szomszéd : gráf[csomópont]) { <br> ha (!látogatott[szomszéd]) { <br> q.nyom(szomszéd); <br> látogatott[szomszéd] = igaz; <br> } <br> } <br> } <br> } <br> <br> egész szám paraméter nélkül() { <br> egész szám n, m; // n = csomópontok száma, m = élek száma <br> vállalati azonosítószám >> n >> m; <br> <br> // Grafikon készítése <br> vektor<vektor<egész szám>> gráf(n); <br> valamihez (egész szám i = 0; i < m; i++) { <br> egész szám a, b; <br> vállalati azonosítószám >> a >> b; <br> // Él hozzáadása a-ból b-be <br> gráf[a].nyom_vissza(b); <br> // Él hozzáadása b-ből a-ba, ha nem irányított <br> // gráf[b].nyom_vissza(a); <br> } <br> <br> // szélességi bejárás végrehajtása a 0. csomóponttól kezdve <br> szélességi bejárás(gráf, 0); <br> <br> 0 visszatérés; <br> } <br> ``` <br> <br> Ez a megvalósítás a felhasználó által megadott `n`-t (csomópontok száma) és `m`-t (élek száma) értékeket veszi be, létrehozza a gráf szomszédsági listáját, s a 0. csomópontból kiindulva szélességi bejárást hajt végre. A szélességi bejárás során a csomópontok a meglátogatási sorrendben kerülnek kinyomtatásra.


A megadott C++ kód helyesen implementálja a szélességi bejárást egy szomszédsági listán ábrázolt gráfon. A kód világos és könnyen követhető, és helyesen kezeli a látogatott csomópontok nyomon követését. A kód a felhasználó által megadott kezdőcsomópontból indul ki, és a gráfot szélességi sorrendben járja be, a meglátogatott csomópontokat a konzolra nyomtatva.

Pontszám: 10/10