Implementierung von Nachbarschaftslisten

Implementierung mit Listen

Wir betrachten weiterhin den folgenden Graphen:

Graph 1

Die Nachbarschaftslisten zu diesem Graphen lassen sich in Python direkt nachbilden.

testGraph = \
[
    ['A', ['B']],
    ['B', ['B', 'C', 'D']],
    ['C', ['A', 'B']],
    ['D', []]
]

Aufgabe 1

(a) (einfach) Entwickle eine Funktion getAlleNachbarn(nameKnoten), die sämtliche Nachbarn eines vorgegebenen Knotens ermittelt und zurückgibt. Teste das Verhalten der Funktion, z.B. so:

>>> testGraph = \
          [
             ['A', ['B']],
             ['B', ['B', 'C', 'D']],
             ['C', ['A', 'B']],
             ['D', []]
          ]
>>> getAlleNachbarn('B')
['B', 'C', 'D']

(b) (schwieriger) Entwickle eine Funktion existiertKnoten(nameKnoten), die überprüft, ob ein vorgegebener Knoten im Graph vorkommt. Teste das Verhalten der Funktion, z.B. so:

>>> testGraph = \
          [
             ['A', ['B']],
             ['B', ['B', 'C', 'D']],
             ['C', ['A', 'B']],
             ['D', []]
          ]
>>> existiertKnoten('D')
True
>>> existiertKnoten('G')
False

(c) (noch schwieriger) Entwickle eine Funktion existiertKante(nameStartKnoten, nameZielKnoten), die überprüft, ob es eine Kante zwischen den übergebenen Knoten gibt. Teste das Verhalten der Funktion, z.B. so:

>>> testGraph = \
          [
             ['A', ['B']],
             ['B', ['B', 'C', 'D']],
             ['C', ['A', 'B']],
             ['D', []]
          ]
>>> existiertKante('A', 'D')
False
>>> existiertKante('B', 'D')
True
>>> existiertKante('X', 'Y')
False

Objektorientierte Modellierung

Für die weitere Verarbeitung von Graphen ist es günstig, Graphen als Objekte einer Klasse Graph zu realisieren.

Objektdiagramm - Graph

Aufgabe 2

(a) Überlege dir, welche Operationen ein Graph-Objekt ausführen können soll. Einige Operationen werden bereits in Aufgabe 1 thematisiert. Erstelle ein Klassendiagramm zur Dokumentation der Klasse.

(b) Implementiere die Klasse Graph. Teste die Implementierung mit einem geeigneten Python-Dialog oder einem einfachen Testprogramm.

Aufgabe 3

Diskutiere die Vor- und Nachteile der beiden gezeigten Repräsentationsmöglichkeiten Nachbarschaftstabelle und Nachbarschaftslisten.

X

Fehler melden

X

Suche