Een handige bewerking op een grafe is het opvragen van alle buren van een knoop: dat zijn alle knopen waarmee die knoop rechtstreeks verbonden is via een boog.
👀 Voorbeeld - Waar geraak je rechtstreeks vanuit Gent?
Beschouw opnieuw de grafe van Vlaamse steden en snelwegen:
De buren van Gent zijn Antwerpen, Brussel en Kortrijk. Dat zijn alle steden waarmee Gent rechtstreeks verbonden is via een snelweg.
💡 Waarvoor gebruik je buren?
De methode
buren()is een basisbouwsteen voor veel toepassingen:
- Navigatie-apps zoals Google Maps gebruiken buren om te bepalen welke wegen je vanuit een kruispunt kan nemen.
- Sociale netwerken zoals LinkedIn tonen je de connecties van een persoon — dat zijn de buren van die knoop in het netwerk.
- Aanbevelingssystemen stellen producten voor die gekocht zijn door mensen die ook jouw aankopen deden — buren in een koopgedrag-grafe.
💻 Programmeeroefening - Buren vinden
Kopieer en plak de klasse
Grafein de editor hieronder.class Grafe: def __init__(self, knopen, bogen): self.knopen = knopen self.bogen = bogen def nieuw(self, boog): self.bogen.add(boog) k1 = boog[0] k2 = boog[1] self.knopen.add(k1) self.knopen.add(k2) def buren(self, knoop): resultaat = set() ... return resultaatOpdracht:
Vervolledig de methode
buren()zodat ze een verzameling teruggeeft met alle knopen die rechtstreeks verbonden zijn metknoopvia een boog.Aanpak:
Loop over alle bogen in
self.bogen. Een boog is een tuple van twee knopen, bijvoorbeeld('Gent', 'Brussel'). Als één van de twee knopen gelijk is aanknoop, dan is de andere knoop een buur.Voorbeelden:
snelwegen = Grafe( {'Gent', 'Brussel', 'Antwerpen', 'Kortrijk', 'Hasselt'}, {('Gent', 'Brussel'), ('Gent', 'Antwerpen'), ('Gent', 'Kortrijk'), ('Brussel', 'Antwerpen'), ('Brussel', 'Hasselt')} ) snelwegen.buren('Gent') # -> {'Brussel', 'Antwerpen', 'Kortrijk'} snelwegen.buren('Hasselt') # -> {'Brussel'} snelwegen.buren('Kortrijk') # -> {'Gent'}Let op: een boog
('A', 'B')betekent dat zowelAeen buur is vanBalsBeen buur is vanA. De grafe is ongerichte, dus de volgorde in de tuple maakt niet uit.