Ga naar hoofdinhoud

8.9 Bouwsteen 6 — herhaal tot klaar

Leerdoel: je zet één enkele regel rondom je ronde-blok zodat hij zichzelf herhaalt tot alle nodes bezocht zijn.

Wat we willen

We willen zeggen: "blijf rondes doen, tot er geen nog-niet-bezochte node meer is."

In Python: een while-lus met een stop-conditie.

Wanneer stoppen?

Onze kies_volgende returnt None als alles bezocht is. Dat is dus ons stop-signaal:

while True:
huidige = kies_volgende(afstanden, bezocht)
if huidige is None:
break # niemand meer over → klaar
bezocht.add(huidige)
for buur, gewicht in graph[huidige]:
nieuwe = afstanden[huidige] + gewicht
if nieuwe < afstanden[buur]:
afstanden[buur] = nieuwe

while True zegt: "blijf maar bezig". De if ... break is de uitgang.

Waarom geen "for node in graph"?

Op het eerste gezicht lijkt het verleidelijk:

for node in graph:
# doe een ronde voor node

Maar dat klopt niet. We willen elke ronde de node met de laagste afstand kiezen — niet gewoon in alfabetische volgorde. kies_volgende doet die slimme keuze.

Stopt deze lus altijd?

Ja — gegarandeerd. Elke ronde voegen we precies één node aan bezocht toe. Na maximaal len(graph) rondes is iedereen erin. kies_volgende returnt dan None, en break springt eruit.

Geen risico op een oneindige lus. Belangrijk: vergeet bezocht.add() niet — anders blijf je dezelfde node steeds opnieuw kiezen. Daarom zetten we dat altijd direct na de kies-stap.

Voorspel

Wat denk je dat de eindafstanden zijn voor onze mini-graph, start A?

Antwoord
{'A': 0, 'B': 4, 'C': 2, 'D': 5}

Exact wat je op papier kreeg.

Run

Python
Code-omgeving wordt voorbereid…
Verwachte uitvoer
Ronde — bezoek A (afstand 0)
Ronde — bezoek C (afstand 2)
Ronde — bezoek B (afstand 4)
Ronde — bezoek D (afstand 5)

Klaar! Afstanden vanaf A: {'A': 0, 'B': 4, 'C': 2, 'D': 5}

Vier rondes, één per node. Vergelijk met je pen-en-papier — exact dezelfde volgorde van "klaar" verklaren.

Wat nu nog mist

Niks — we hebben Dijkstra werkend. In de volgende stap zetten we alles netjes in één functie en zien we het hele algoritme tegelijk.

Door naar stap 10: het complete algoritme →.