Bouwsteen 1 — de graph in Python
Hier bouw je op verder
- Python Dictionaries
- Python Lijsten
- Python De for-loop
- Python F-strings
- Python Tuples
Leerdoel: je kunt een gewogen graph opslaan in een Python-dict, en voor één node zijn buren ophalen.
Wat we willen
We hebben dit plaatje:
4
A ─────── B
│ │
2 1
│ │
C ─────── D
8
Dit moet in Python, zó dat we straks kunnen vragen wie de buren van A
zijn, en als antwoord krijgen: B met gewicht 4, en C met gewicht 2.
Eén node, één lijstje
Voor elke node hebben we een lijstje van buren nodig, met hun gewicht. Dat wordt een lijst van tuples:
buren_van_A = [('B', 4), ('C', 2)]
Lees: "de buren van A zijn: B met gewicht 4, en C met gewicht 2."
Een tuple houdt de naam van de buur en het gewicht bij elkaar. Het is een lijst van tuples, want een node kan meer dan één buur hebben.
Alle nodes in één dict
Voor alle vier de nodes samen maken we één dict:
graph = {
'A': [('B', 4), ('C', 2)],
'B': [('A', 4), ('D', 1)],
'C': [('A', 2), ('D', 8)],
'D': [('B', 1), ('C', 8)],
}
De sleutel is de naam van de node, de waarde zijn buren.
Elke edge staat twee keer in deze dict. De edge A─B met gewicht 4 zie
je bij 'A': [..., ('B', 4), ...] én bij 'B': [('A', 4), ...]. Een
weg die je beide kanten op mag, sla je aan beide kanten op.
Voorspel
Wat denk je dat dit print?
graph = {
'A': [('B', 4), ('C', 2)],
'B': [('A', 4), ('D', 1)],
'C': [('A', 2), ('D', 8)],
'D': [('B', 1), ('C', 8)],
}
print(graph['A'])
Antwoord
[('B', 4), ('C', 2)]
Een lijst met twee tuples. Vanuit A zijn er twee buren.
Run
Door de buren lopen
Met for buur, gewicht in graph['A']: pak je elke tuple uit in twee
losse variabelen:
Verwachte uitvoer
A → B (gewicht 4)
A → C (gewicht 2)
Wat nu nog mist
De graph staat erin en de buren komen eruit. Er is nog geen plek voor de afstanden en voor wie al bekend is; dat is bouwsteen 2.
Door naar bouwsteen 2: de tabel →.