Graph — BFS & DFS — Struktur Data

BFS dan DFS adalah dua cara utama menjelajahi semua node di graph. BFS (Breadth-First Search) Kunjungi semua tetangga dulu sebelum pindah ke level berikutnya. G

BFS dan DFS adalah dua cara utama menjelajahi semua node di graph.

BFS (Breadth-First Search)

Kunjungi semua tetangga dulu sebelum pindah ke level berikutnya. Gunakan Queue.

function bfs(graph, start) {
  const visited = new Set();
  const queue = [start];
  visited.add(start);

  while (queue.length > 0) {
    const vertex = queue.shift();
    console.log(vertex);

    for (const neighbor of graph.adjacencyList.get(vertex)) {
      if (!visited.has(neighbor)) {
        visited.add(neighbor);
        queue.push(neighbor);
      }
    }
  }
}
// Dari Jakarta: Jakarta → Bandung → Surabaya → Yogya

DFS (Depth-First Search)

Masuk sedalam mungkin dulu sebelum mundur. Gunakan Stack (atau rekursi).

function dfs(graph, start) {
  const visited = new Set();

  function explore(vertex) {
    visited.add(vertex);
    console.log(vertex);

    for (const neighbor of graph.adjacencyList.get(vertex)) {
      if (!visited.has(neighbor)) {
        explore(neighbor);
      }
    }
  }

  explore(start);
}
// Dari Jakarta: Jakarta → Bandung → Yogya → Surabaya

Perbandingan:

Fitur BFS DFS
Struktur Queue Stack/Rekursi
Pola Level by level Sedalam mungkin
Shortest path Ya (unweighted) Tidak
Memori Lebih banyak Lebih sedikit
Kegunaan Shortest path, level order Cycle detection, topological sort

🎭 Analogi sehari-hari: Cari kunci yang ilang di rumah.

💡 Kenapa BFS = shortest path (unweighted)? Karena BFS expand level-by-level. Saat target ditemukan, dijamin ditemukan di level paling dekat dari start. DFS bisa nemu duluan, tapi mungkin lewat jalur lebih panjang.

⚠️ Jebakan umum:

🎯 BFS atau DFS untuk problem ini?

🧪 Tebakan cepat: Maze 1000x1000, cari pintu keluar terdekat. BFS atau DFS? BFS — DFS bisa nyasar masuk koridor panjang dulu. BFS pasti shortest.

TL;DR: BFS = level-by-level (queue), shortest path. DFS = sedalam mungkin (stack/recursion), cycle detection. Wajib visited set untuk graph.