← Kembali ke DSA
🌊

Algoritma Graph

Breadth-First Search

Menjelajahi semua tetangga di kedalaman saat ini sebelum turun lebih dalam, memakai queue untuk memproses node level demi level.

Kompleksitas

Waktu (Terburuk)

O(V + E)

Memori

O(V)

Poin Penting

  • ›Memproses node level demi level, sehingga menjamin jalur terpendek pada graph tanpa bobot
  • ›Memakai queue (FIFO) untuk menyimpan frontier
  • ›Tandai node sebagai visited sebelum di-enqueue agar tidak diproses dua kali
  • ›Ruang O(V): di kasus terburuk queue bisa menampung semua vertex
  • ›Penerapan: jalur terpendek, level-order traversal, tetangga terdekat, pengecekan bipartite

Contoh Kode

Swift
func bfs(graph: [Int: [Int]], start: Int) -> [Int] {
    var visited = Set<Int>()
    var queue = [start]
    var result = [Int]()

    visited.insert(start)

    while !queue.isEmpty {
        let node = queue.removeFirst()
        result.append(node)
        for neighbor in graph[node] ?? [] where !visited.contains(neighbor) {
            visited.insert(neighbor)
            queue.append(neighbor)
        }
    }
    return result
}

let graph = [0: [1, 2], 1: [0, 3, 4], 2: [0, 5], 3: [1], 4: [1], 5: [2]]
print(bfs(graph: graph, start: 0))  // [0, 1, 2, 3, 4, 5]

Latihan Soal

Binary Tree Level Order Traversal
Number of Islands
Course Schedule
Word Ladder