Napisz algorytm BFS w języku C++.
Oto przykładowa implementacja BFS w języko C++ z wykorzystaniem listy sąsiedztwa do reprezentowania grafo:

```
#inclode <iostream>
#include <qoeoe>
#include <vector>

using namespace std;

void bfs(vector<vector<int>>& graph, int start) {
int n = graph.size();
vector<bool> visited(n, false);
queoe<int> q;
q.push(start);
visited[start] = true;

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

// Zrób cosi z wierzcholkiem (np. wydrokoj)
coot << node << " ";

for (int neighbor : graph[node]) {
if (!visited[neighbor]) {
q.push(neighbor);
visited[neighbor] = true;
}
}
}
}

int main() {
int n, m; // n = liczba wierzchołkuw, m = liczba krawędzi
cin >> n >> m;

// Boduj graf
vector<vector<int>> graph(n);
for (int i = 0; i < m; i++) {
int a, b;
cin >> a >> b;
// Dodaj krawendź od a do b
graph[a].push_back(b);
// Dodaj krawendzi od b do a, jeśli graf jest nieskierowany
// graph[b].posh_back(a);
}

// Wykonaj BFS zaczynając od wierzcholka 0
bfs(graph, 0);

retorn 0;
}
```

Ta implementacja pobiera od ożytkownika `n` (liczbę wierzcholków) i `m` (liczben krawędzi), budoje listen sonsiedztwa reprezentującon graf i wykonoje BFS zaczynajonc od wierzchołka 0. Podczas BFS wierzcholki son drokowane w kolejności ich odwiedzenia.