AuD Übung 09 Graphen (Stefan Bosse) [25.1.2025] |
Punkte: | Total | /2 | 1. | /2 | 2. | /2 | 3. | /2 |
Abgabe: 31.1.2025
Es dürfen keine Standard Java Packages verwendet werden mit Ausnahme von System und String.
Der Java Code wird separat als klassisches natives Java Projekt abgegeben. Die wesentlichen Teile sollen aber zum Zwecke der Dokumentation hier in den Code Snippets eingetragen werden (unabhängig ob sie damit ausführbar sind oder nicht).
In dieser Übung soll eine einfache topologische Graphenklasse implementiert werden.
Nodes:
Koblenz 115298
Bonn 335789
Mainz 222889
Siegen 102560
Koeln 1087353
Remagen 7965
Edges:
(Koblenz,Mainz) 84
(Mainz,Koblenz) 76
(Siegen,Koblenz) 79
(Koeln,Bonn) 28
(Bonn,Remagen) 22
(Remagen,Koblenz) 40
(Mainz,Bonn) 138
(Siegen,Koeln) 85
Implementiere den Graphen mit verketteten Listen. Dabei werden die Knoten in der Reihenfolge des Einfügens verkettet (Liste N) und dann abgehend von jedem Knoten die Kantenliste (Liste E).
new Graph()
).addNode(String name.int Einwohnerzahl)
hinzugefügt.addEdge(String from, String to, int distance)
hinzugefügt.removeNode
,`removeEdge*).Aufgabe 1. Erstelle die Klasse Graph und füge den Programmkode unten ein.
Klasse GraphWir haben zwei Listenelemente: Knoten und Kante. Es werden hier doppelt verkettete Listen eingesetzt. Das vereinfacht die Listenmanipulation. Die Listen werden daher mit Methoden der Listenelemente verarbeitet.
VEJB
Aufgabe 2. Erstelle die Klassen Node und Edge und füge den Programmkode unten ein.
Klasse Node und Edge für Knoten- und KantenlistenTipp: Das Attribut from kann entfallen da die Edge Liste in Node eingebunden ist und der Knoten selber der Startpunkt jeder Kante ist.
VEJB
Aus den Knoten- und Kantenlisten soll (zu jedem Zeitpunkt) eine Adjazenzmatrix erstellt werden (createA
). Dieser Vorgang kann nach geänderten Graphen wiederholt werden und erzeugt eine neue Matrix A-
updateA
Methode mit aktueller Anzahl von Knoten n erzeugtEine Zeile ist der Startknoten, eine Spalte der Zielknoten.
Neben der A Matrix soll auch die Erreichbarkeitsmatrix E und Emin berechnet werden.
Es wird die Matrixalgebra aus Übung 3 für das Skalaraprodukt von Matrizen benötigt.
Zur Berechnung der kürzesten Pfade zwischen zwei Knoten i und j wird der Floyd-Warshall Algorithmus verwendet mit Emin als Ergebnis. Nicht erreichbare Pfade werden schließlich mit einen Null Wert in den Matrizen versehen.
a=[
[0,5,3,8],
[0,0,0,5],
[0,0,0,1],
[0,0,2,0]
]
e=copy(a)
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if (e[i][j]==0) e[i][j]=Infinity
n=4
for(k=0;k<n;k++)
for(i=0;i<n;i++)
for(j=0;j<n;j++) {
if ((e[i][k]+e[k][j]) < e[i][j])
e[i][j]=e[i][k]+e[k][j]
}
Aufgabe 3. Teste nun die Implementierung mit obigen Beispielen. Füge Knoten und Kanten ein. Erstelle die A, E und Emin Matrizen und gebe diese Aus. Trage die Matrixwerte unten ein. Gibt es nicht erreichbare Städte?