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.