Bouwsteen 6 — herhaal tot klaar
Hier bouw je op verder
- Python De while-loop
- Python Break
Leerdoel: je zet een lus om je ronde, zodat hij zichzelf herhaalt tot alle nodes bezocht zijn.
Wat we willen
Blijf rondes doen tot er geen onbezochte node meer over is. In Python
is dat een while-lus met een stopvoorwaarde.
Wanneer stoppen?
kies_volgende geeft None terug als alles bezocht is. Dat is het
stopsignaal:
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 is een lus zonder eigen stopvoorwaarde: hij draait tot
iets erin break zegt, en dat is hier de enige uitgang. huidige is None vraagt of kies_volgende niemand teruggaf — None is wat die
functie geeft als alles bezocht is, zoals je in bouwsteen 4 zag.
Waarom geen "for node in graph"?
Dit lijkt op het eerste gezicht ook te kunnen:
for node in graph:
# doe een ronde voor node
Maar dan kies je de nodes in de volgorde van de dict, en Dijkstra wil
elke ronde de node met de laagste afstand. Die keuze maakt
kies_volgende.
Stopt deze lus altijd?
Ja. Elke ronde komt er precies één node bij in bezocht, dus na
hoogstens len(graph) rondes zit iedereen erin. kies_volgende geeft
dan None, en break springt eruit.
Elke ronde maakt bezocht één groter, en kies_volgende kijkt daar
elke ronde naar. Dat is de hele garantie.
Voorspel
Wat denk je dat de eindafstanden zijn voor onze mini-graph, start A?
Antwoord
{'A': 0, 'B': 4, 'C': 2, 'D': 5}
Wat je op papier ook kreeg.
Run
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, en dezelfde volgorde als op papier.
Wat nu nog mist
Niets meer: dit is Dijkstra. Op de volgende pagina staat alles in één functie, zodat je het hele algoritme in één keer ziet.
Door naar het complete algoritme →.