fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. // ada N node
  5. int N;
  6.  
  7. // ada M edge
  8. int M;
  9.  
  10. // apakah node ke-i sudah terkunjungi?
  11. // false jika belum dan true jika sudah
  12. bool terkunjungi[1001];
  13.  
  14. // representasi graf menggunakan adjacency list
  15. vector<int>adj[1001];
  16.  
  17. void bfs(int awal){
  18.  
  19. // inisiasi sebuah queue kosong
  20. queue<int> qu;
  21.  
  22. // masukkan node `awal` ke dalam queue
  23. qu.push(awal);
  24.  
  25. // tandai node `awal` telah dikunjungi
  26. terkunjungi[awal]=true;
  27.  
  28. // selama masih ada node yang bisa dikunjungi
  29. while(!qu.empty()){
  30.  
  31. // ambil node sekarang yang berada di depan queue sebagai `now`
  32. int now = qu.front();
  33.  
  34. // buang node tersebut
  35. qu.pop();
  36.  
  37. // memasuki node `now`
  38. cout << "Masuk ke node " << now << "\n";
  39.  
  40. // Periksa seluruh tetangga dari node `now`
  41. for(auto next:adj[now]){
  42.  
  43. // Cek apakah node `next` sudah dikunjungi atau belum
  44. if(!terkunjungi[next]){
  45.  
  46. // masukkan node `next` ke dalam queue
  47. qu.push(next);
  48.  
  49. // tandai node `next` telah dikunjungi
  50. terkunjungi[next]=true;
  51. }
  52. }
  53. }
  54. }
  55. int main(){
  56. cin >> N >> M;
  57. for(int i=1; i<=M; i++){
  58. int U,V;
  59. cin >> U >> V;
  60.  
  61. // menambahkan edge dari U ke V ke dalam adjacency list
  62. adj[U].push_back(V);
  63.  
  64. // menambahkan edge dari V ke U ke dalam adjacency list
  65. adj[V].push_back(U);
  66. }
  67. // Solusi menggunakan queue
  68. // kunjungan awal ada di node 1
  69. bfs(1);
  70. }
Success #stdin #stdout 0.01s 5468KB
stdin
11 13
1 2
1 6
1 7
1 10
1 11
2 3
2 4
3 4
4 5
7 8
7 9
9 10
10 11
stdout
Masuk ke node 1
Masuk ke node 2
Masuk ke node 6
Masuk ke node 7
Masuk ke node 10
Masuk ke node 11
Masuk ke node 3
Masuk ke node 4
Masuk ke node 8
Masuk ke node 9
Masuk ke node 5