Ga naar hoofdinhoud

Bouwsteen 1 — de graph in Python

Hier bouw je op verder: Dictionaries, Lijsten, De for-loop, F-strings en Tuples

Weet je dit niet meer zeker? Lees het terug voordat je verdergaat.

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​

Python
Code-omgeving wordt voorbereid…

Door de buren lopen​

Met for buur, gewicht in graph['A']: pak je elke tuple uit in twee losse variabelen:

Python
Code-omgeving wordt voorbereid…
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 →.