11. Übungsblatt - Universität Konstanz

Werbung
Algorithmen und Datenstrukturen
Universität Konstanz
Fachbereich Informatik & Informationswissenschaft
WS 2011/2012
Jun.-Prof. Dr. Steffen Rendle / Dr. Andreas Karrenbauer / Arlind Nocaj / Uwe Nagel
11. Übungsblatt
(vorletztes Übungsblatt)
Ausgabe: 11. Januar 2012 Abgabe: 19. Januar 2012
Die Bearbeitung in Zweiergruppen ist ausdrücklich erwünscht.
Aufgabe 1: Senke
4 Punkte
Sei G = (V, E) ein gerichteter Graph. Ein Knoten v ∈ V heißt Senke, wenn
es von jedem Knoten w ∈ V, w 6= v in G einen gerichteten Weg nach v
gibt. Entwickeln Sie einen Algorithmus, welcher entscheidet, ob ein gegebener
Graph G eine Senke hat. Geben Sie die Laufzeit Ihres Algorithmus an.
Aufgabe 2: Topologische Sortierung
6 Punkte
Eine topologische Sortierung in einem gerichteten azyklischen Graphen G =
(V, E) mit |V | = n ist eine Nummerierung der Knoten, also eine bijektive
Abbildung f : V → {1, . . . , n}, so dass für alle Kanten (v, w) ∈ E gilt: f (v) <
f (w). Anders ausgedrückt werden alle Knoten auf einer Linie nebeneinander
angeordnet und alle Kanten zeigen nach rechts.
(a) Beschreiben Sie ein Verfahren (z. B. durch Pseudocode), das einen gegebenen gerichteten azyklischen Graphen G = (V, E) topologisch sortiert.
Ein zerstreuter Professor kann sich nie merken, in welcher Reihenfolge er sich
anziehen soll. Er hat zehn Kleidungsstücke: Unterhose, Socken, Uhr, Gürtel,
Jackett, Hemd, Unterhemd, Krawatte, Schuhe, Hose.
(b) Stellen Sie einen gerichteten azyklischen Graphen auf; dieser hat die
Kleidungsstücke als Knoten, und gerichtete Kanten zwischen zwei Kleidungsstücken, wenn man das eine vor dem anderen anziehen sollte, z. B.
Unterhemd → Hemd.
(c) Helfen Sie dem Professor beim Anziehen, indem Sie eine topologische
Sortierung dieses Graphen angeben.
[bitte wenden]
Aufgabe 3: Graphen
10 Punkte
Implementieren
Sie
die
Interfaces
material.u11.IGraph,
material.u11.INode und material.u11.IEdge durch einen Graphen
mit Adjazenzlistendarstellung.
Nennen Sie Ihre Klassen Graph, Node, Edge. Ihre Klasse Graph soll eine
main()-Methode erhalten, in der testweise einige Graph-Operationen ausgeführt werden, z.B. Knoten und Kanten einfügen und löschen.
Herunterladen