Kapitel 4 Eulersche Graphen 4.1 Das Königsberger Brückenproblem Die zugrundeliegende Fragestellung hat ihren Ursprung im Königsberger Brückenproblem“: im ” Fluss Pregel, der durch Königsberg fließt, liegen zwei Inseln, die untereinander und mit den Ufern verbunden sind (vgl. Abb. 4.1. Abbildung 4.1: Das Königsberger Brückenproblem Frage: Ist es möglich, einen Rundgang so zu machen, dass man jede Brücke genau einmal passiert und zum Ausgangspunkt zurückkehrt? Die Frage wurde 1736 von Euler beantwortet. Eine verwandte Fragestellung ist das Chinese Postman Problem: kann ein Postbote sein Revier so abgehen, dass er keine Straße doppelt laufen muss? Wir nennen einen zusammenhängenden Graphen eulersch, wenn ein geschlossener Pfad existiert, der jede Kante genau einmal durchäuft. Er heißt semi-eulersch, wenn ein Pfad existiert, der alle Kanten durchläuft. Das Königsberger-Brücken-Problem besteht dann darin, für den in Abb. 4.2 dargestellten Graphen zu entscheiden, ob er eulersch bzw. semi-eulersch ist. Offensichtlich ist nicht jeder Graph eulersch, auch nicht jeder semi-eulersche Graph (vgl. Abb. 4.2.1). Das folgende Lemma liefert die Basis für die Charakterisierung eulerscher Graphen. 44 45 KAPITEL 4. EULERSCHE GRAPHEN I1 U U 1 I 2 2 Abbildung 4.2: Der Graph zum Königsberger Brückenproblem 1 3 2 4 5 1 9 10 12 8 6 9 7 8 2 10 11 6 7 5 3 4 Abbildung 4.3: Ein nicht-eulerscher, semi-eulerscher und ein eulerscher Graph 4.2 Charakterisierung eulerscher Graphen Lemma 4.1. Sei G ein Graph mit d(v) ≥ 2 für alle v ∈ V. Dann enthält G einen Kreis. Beweis: √ i) G enthält eine Schlinge oder Mehrfachkanten ii) G ist einfach. Konstruiere eine Kantenfolge v 0 , v1 , . . . wie folgt: wähle v0 ∈ V beliebig, wähle vi+1 ∈ N (vi ) r vi−1 . Da |V | < ∞, muss irgendwann ein Knoten zum zweiten Mal erreicht werden. 2 Satz 4.2. Ein zusammenhängender Graph ist genau dann eulersch, wenn d(v) gerade ist für alle v ∈ V. Beweis: i) Ist P ein geschlossener eulerscher Pfad, so wird jeder Knoten genau so oft verlassen wie erreicht und jedesmal auf verschiedenen Kanten. Daher ist d(v) gerade. ii) Sei G ein Graph mit d(v) gerade für alle v ∈ V. Wir führen eine Induktion über |E| durch. Da G zusammenhängend ist, folgt d(v) ≥ 2 für alle v ∈ V. Nach dem vorigen Lemma 4.1 enthält G einen Kreis C. Falls C schon alle Kanten von G enthält, ist die Behauptung bewiesen. Andernfalls betrachte H = G r C. Da |E(H)| < |E(G)| und d(v) gerade für alle v ∈ V (H), folgt per Induktion, dass jede Komponente von H einen geschlossenen eulerschen Pfad hat, die zusammen mit C einen geschlossenen eulerschen Pfad von G ergeben. KAPITEL 4. EULERSCHE GRAPHEN 46 2 Als Folgerung aus dem letzten Satz ergibt sich: Korollar 4.3. Ein zusammenhängender Graph ist genau dann eulersch, wenn er Vereinigung von kantendisjunkten Kreisen ist. 2 Korollar 4.4. Ein zusammenhängender Graph ist semi-eulersch genau dann, wenn höchstens zwei Knoten ungeraden Grad haben (d.h. 0 oder 2) Beweis: Ein semi-eulerscher Graph besitzt entweder einen geschlossenen eulerschen Pfad (d.h. er ist eulersch) oder einen normalen eulerschen Pfad. Damit enthält er entweder keine Knoten mit ungeradem Grad oder zwei. Umgekehrt ist der Graph nach Satz 4.2 entweder eulersch (und damit semi-eulersch) oder er wird eulersch, wenn wir die beiden ungeraden Knoten durch eine zusätzliche Kante verbinden. Im letzten Fall erhalten wir den gesuchten Euler-Pfad, wenn wir die zusätzlich eingefügte Kante wieder entfernen. 2 Mit der gleichen Technik folgt: Korollar 4.5. Sei G ein zusammenhängender Graph und 2k die Anzahl der ungeraden Knoten. Dann lässt sich die Kantenmenge E disjunkt zerlegen in E = P 1 ∪ . . . ∪ Pk , wobei jedes Pi ein kantendisjunkter Pfad ist. 2 Beweis: Seien die ungeraden Knoten x 1 , . . . , xk , y1 , . . . , yk . Füge zu G zusätzliche Kanten (xi , yi ) für 1 ≤ i ≤ k hinzu. Der so entstandene Graph ist eulersch. Wie vorher erhalten wir die gewünschte Zerlegung, wenn wir die zusätzlichen Kanten aus dem eulerschen Pfad entfernen. 2 Der Beweis des vorigen Satzes liefert einen Algorithmus zur Bestimmung eines eulerschen Pfades. Die einzige Schwierigkeit, die es zu beachten gibt, ist die folgende. Sei G k der Teilgraph der Kanten, die wir nach k Schritten noch nicht durchlaufen haben und x der aktuelle Knoten (vgl. Abb. 4.4). Wir müssen vermeiden, eine Schnittkante zu wählen, da wir sonst nicht mehr in die Zusammenhangskomponente zurückkommen. Es sei denn, dGk (x) = 1. x Abbildung 4.4: Auftreten einer Schnittkante bei der Konstruktion eines Eulerschen Pfades 4.2.1 Algorithmus zur Bestimmung eines Euler-Pfades (1) Ausgehend von einem Knoten a, folge einem Kantenzug, der keine Kante zweimal benutzt. 47 KAPITEL 4. EULERSCHE GRAPHEN (2) Falls im Schritt k ein Knoten x 6= a erreicht wird, verlasse x niemals auf einer Schnittkante des von den unbenutzten Kanten induzierten Teilgraphen G k , es sei denn dGk (x) = 1. (3) Falls x = a, verlasse a auf einer unbenutzten Kante, falls keine existiert, Stop. Satz 4.6. Der von dem obigen Algorithmus erzeugte Pfad ist eulersch. Beweis: (1) Die Regeln können eingehalten werden. Wenn wir x 6= a erreichen, so existiert immer eine Kante in Gk , die mit x inzidiert, da dG (x) gerade und somit dGk (x) ungerade. Ist dGk (x) = 1, so kann x auf dieser Kante verlassen werden. Ist d Gk (x) > 1, so existiert mindestens eine Kante, die nicht Schnittkante in Gk ist. Andernfalls existieren zwei Schnittkanten in G k , die x mit zwei Komponenten C und D verbinden (vgl. Abb. 4.2.1). C x D Da der Grad dGk (x) ungerade ist, die Anzahl der ungeraden Knoten in C aber gerade ist (Lemma 1.4), muss C noch einen weiteren ungeraden Knoten enthalten. Entsprechend D. Da G k aber genau zwei Knoten mit ungeradem Grad hat (den Startknoten a und den Knoten x), liefert dies einen Widerspruch. (2) Der in den ersten k Schritten erzeugte Graph ist der Anfang eines eulerschen Pfades. Denn nach Erreichen eines Knotens x 6= a existieren genau zwei Knoten (x und a) in G k , die ungeraden Grad haben. Nach Korollar 4.4 existiert dann noch ein Pfad in G k , der semi-eulersch ist. 2 Der Algorithmus kann so implementiert werden, dass er eine lineare Laufzeit von O(|V | + |E|) hat. Für das Chinese Postman Problem und andere Fragestellungen wird es von Interesse sein, einen Graphen G = (V, E) durch Hinzufügen von Kanten eulersch zu machen. Dazu benötigen wir noch einige andere Hilfsmittel, die wir in einem späteren Kapitel behandeln werden.