İçeriğe atla
CodeItRaw
Graflar

Ders 4/4

Derinlemesine arama bir yol bulur ama en kısasını bulmaz. En kısa yol için sırayı değiştirirsin: önce başlangıcın bütün komşuları, sonra onların komşuları. Suya atılan taşın halkaları gibi dışarı yayılırsın; bir düğüme ilk vardığında oraya en az adımla varmışsındır. Buna genişlemesine arama (BFS) denir.

from collections import deque
queue = deque([(start, 0)])
seen = {start}
while queue:
node, steps = queue.popleft()
if node == goal:
return steps
for nxt in graph[node]:
if nxt not in seen:
seen.add(nxt)
queue.append((nxt, steps + 1))
return -1
DFS'ten tek farkı yığın yerine kuyruk kullanmasıdır: önce giren önce çıkar. Adım sayısı düğümle birlikte kuyrukta taşınır. Kuyruk boşaldığı hâlde hedef çıkmadıysa oraya yol yoktur.

Bu, her adımın aynı "maliyette" olduğu durumlar için geçerlidir (ızgarada bir kare, labirentte bir hamle). Enerjin sınırlıysa ya da en yakın hedefi arıyorsan kuş uçuşu mesafe seni yanıltır: duvarın arkasındaki yakın hedef, uzaktaki açık hedeften daha pahalı olabilir. Mesafeyi BFS ile ölç.

Görevler

Görevler sırayla açılır. Hepsini çözünce sonraki ders açılır.

Bu dersin görevleri, önceki dersler bitince açılır. Anlatımı şimdiden okuyabilirsin.

  1. 01

    En Kısa Adım

    Fonksiyon

  2. 02

    Kasa Dairesi

    Sızma

Sırayı beklemeden çözmek istersen bütün problemler kilitsiz açık: Problemler listesi