www.wikidata.de-de.nina.az
Ein Eulerkreis auch geschlossener Eulerzug Eulertour ist in der Graphentheorie ein Zyklus der alle Kanten eines Graphen genau einmal enthalt In kantendisjunkte Kreise zerlegter Eulergraph Eine Eulertour der Knotenfolge 1 2 3 1 8 7 6 9 5 4 9 7 4 3 7 1 ist in alphabetischer Reihenfolge angegeben Ein offener Eulerzug auch Eulerpfad oder Eulerweg ist gegeben wenn Start und Endknoten nicht gleich sein mussen wenn also statt eines Zyklus lediglich eine Kantenfolge verlangt wird welche jede Kante des Graphen genau einmal enthalt Ein bekanntes Beispiel ist das Haus vom Nikolaus Ein zusammenhangender Graph der einen Eulerkreis besitzt heisst eulerscher Graph Enthalt ein Graph lediglich einen Eulerweg und keinen Eulerkreis so heisst er semi eulerscher Graph Die Aufgabe zu einem gegebenen Graph zu bestimmen ob dieser eulersch ist oder nicht wird als Eulerkreisproblem bezeichnet Es geht auf das 1736 von Leonhard Euler geloste Konigsberger Bruckenproblem zuruck Das Problem existiert auch fur gerichtete Graphen und Graphen mit Mehrfachkanten Entgegen seinem Namen ist der Eulerkreis kein Kreis zumindest wenn der haufigen Definition gefolgt wird nach der sich in einem Kreis kein Knoten wiederholen darf Inhaltsverzeichnis 1 Geschichte 2 Charakterisierung 3 Verallgemeinerung Eulerweg 4 Entscheidungsproblem 5 Auffinden eines Eulerkreises 5 1 Algorithmus von Hierholzer 5 1 1 Beispiel 5 1 2 Programmierung 5 2 Algorithmus von Fleury 5 2 1 Programmierung 6 Vermutung von Hajos 7 Anwendungsbeispiele 7 1 Das Konigsberger Bruckenproblem 7 2 Das Haus vom Nikolaus 8 Siehe auch 9 Literatur 10 EinzelnachweiseGeschichte BearbeitenLeonhard Euler fragte in seiner Arbeit 1736 zum Konigsberger Bruckenproblem ubersetzt in die heutige Fachsprache ob der durch die Brucken der Stadt gegebene Graph ein semi eulerscher Graph ist das heisst ob ein Eulerweg existiert und verneinte dies da der Graph mehr als zwei Knoten mit ungeradem Grad hatte Euler bewies dass ein semi eulerscher Graph hochstens zwei Knoten ungeraden Grades haben kann 1 Er vermutete und gab ohne Beweis an dass dies eine hinreichende Bedingung sei Ein zusammenhangender Graph in dem jeder Knoten geraden Grad hat ist ein Eulergraph Ein Beweis des Satzes wurde zuerst von Carl Hierholzer 1873 veroffentlicht 2 Auf dem Beweis basiert der Algorithmus von Hierholzer zum Auffinden eines Eulerwegs Charakterisierung BearbeitenNach dem Satz von Euler Hierholzer sind eulersche Graphen leicht zu charakterisieren Sei G ein Graph bei dem hochstens eine Zusammenhangskomponente Kanten enthalt Dann sind folgende Aussagen aquivalent G ist eulersch jeder Knoten in G hat geraden Grad die Kantenmenge von G ist die Vereinigungsmenge aller Kanten von paarweise disjunkten Kreisen Analog sind fur einen gerichteten Graphen G bei dem hochstens eine starke Zusammenhangskomponente Kanten enthalt folgende Aussagen aquivalent G ist eulersch fur jeden Knoten in G sind Eingangsgrad und Ausgangsgrad gleich die Kantenmenge von G ist die Vereinigungsmenge aller Kanten von paarweise disjunkten gerichteten Kreisen Verallgemeinerung Eulerweg BearbeitenEin ungerichteter zusammenhangender Graph enthalt genau dann einen Eulerweg wenn zwei oder keiner seiner Knoten von ungeradem Grad sind Hat kein Knoten ungeraden Grad handelt es sich bei dem Eulerweg um einen Eulerkreis Entscheidungsproblem BearbeitenDie Frage ob fur einen gegebenen Graph ein Eulerkreis existiert lasst sich algorithmisch relativ leicht losen da ein Graph genau dann eulersch ist wenn er zusammenhangend ist und jeder Knoten geraden Grad besitzt Mittels Tiefensuche lasst sich dies leicht in linearer Zeit feststellen Auffinden eines Eulerkreises BearbeitenZum Auffinden eines Eulerkreises existieren mehrere Verfahren Der Algorithmus von Fleury stammt aus dem Jahr 1883 und verfolgt einen sehr einfachen Ansatz weshalb er eine Laufzeit von der Grossenordnung O E 2 displaystyle mathcal O E 2 nbsp hat Effizienter ist der Algorithmus von Hierholzer der einen Eulerkreis in Linearzeit berechnet Er basiert darauf dass sich ein eulerscher Graph in paarweise kantendisjunkte Kreise zerlegen lasst Algorithmus von Hierholzer Bearbeiten Hauptartikel Algorithmus von Hierholzer Wahle einen beliebigen Knoten v 0 displaystyle v 0 nbsp des Graphen und konstruiere von v 0 displaystyle v 0 nbsp ausgehend einen Kreis K displaystyle K nbsp in G displaystyle G nbsp der keine Kante in G displaystyle G nbsp zweimal durchlauft Wenn K displaystyle K nbsp ein Eulerkreis ist brich ab Andernfalls Vernachlassige nun alle Kanten des Kreises K displaystyle K nbsp Am ersten Knoten von K displaystyle K nbsp dessen Grad grosser 0 ist wird nun ein weiterer Kreis K displaystyle K nbsp gebildet der keine Kante in K displaystyle K nbsp durchlauft und keine Kante in G displaystyle G nbsp zweimal enthalt Fuge in K displaystyle K nbsp den zweiten Kreis K displaystyle K nbsp ein indem der Startknoten von K displaystyle K nbsp durch alle Knoten von K displaystyle K nbsp in der richtigen Reihenfolge ersetzt wird Nenne jetzt den so erhaltenen Kreis K displaystyle K nbsp und fahre bei Schritt 2 fort Die Laufzeit des Algorithmus ist linear in der Anzahl der Kanten ist also von der Grossenordnung O E displaystyle mathcal O E nbsp Beispiel Bearbeiten nbsp Animation des Algorithmus von Hierholzer fur einen Eulergraph mit 9 Knoten Gegeben sei ein Eulergraph mit neun Knoten siehe erste Abbildung Ein Zyklus vom Startknoten 1 ware beispielsweise die in der zweiten Abbildung blau dargestellte Knotenfolge C blau 1 2 3 7 1 displaystyle C text blau 1 2 3 7 1 nbsp Nach Entfernen dieser Kanten haben die Knoten 1 3 und 7 der bisher gebildeten Zyklus noch einen Knotengrad grosser Null welche als Startknoten fur den nachsten Zyklus in Frage kommen Vom Startknoten 3 aus kann man den Kreis C rot 3 1 8 7 4 3 displaystyle C text rot 3 1 8 7 4 3 nbsp bilden siehe dritte Abbildung Wahlt man nun als Startknoten den Knoten 7 kann man von den ubrig gebliebenen Kanten den Zyklus C grun 7 6 9 5 4 9 7 displaystyle C text grun 7 6 9 5 4 9 7 nbsp bilden Setzt man jetzt C grun displaystyle C text grun nbsp in C rot displaystyle C text rot nbsp an Stelle des Knoten 7 ein erhalt man den Zyklus 3 1 8 7 6 9 5 4 9 7 4 3 displaystyle 3 1 8 7 6 9 5 4 9 7 4 3 nbsp Setzt man diesen in C blau displaystyle C text blau nbsp an Stelle des Knoten 3 ein erhalt man die mogliche Eulertour 1 2 3 1 8 7 6 9 5 4 9 7 4 3 7 1 displaystyle 1 2 3 1 8 7 6 9 5 4 9 7 4 3 7 1 nbsp wie in der letzten Abbildung gezeigt Die Abbildung rechts zeigt eine Animation fur dieses Beispiel nbsp Eulergraph mit neun Knoten nbsp C blau 1 2 3 7 1 displaystyle C text blau 1 2 3 7 1 nbsp nbsp Nach Entfernen der blauen Kanten kann man den nachsten Zyklus ausgehend vom Knoten 1 3 oder 7 bilden hier vom Knoten 3 C rot 3 1 8 7 4 3 displaystyle C text rot 3 1 8 7 4 3 nbsp nbsp Nach Entfernen der roten Kanten kann man den nachsten Zyklus ausgehend vom Knoten 4 oder 7 bilden hier vom Knoten 7 C grun 7 6 9 5 4 9 7 displaystyle C text grun 7 6 9 5 4 9 7 nbsp nbsp Eulerkreis mit der Knotenfolge 1 2 3 1 8 7 6 9 5 4 9 7 4 3 7 1 displaystyle 1 2 3 1 8 7 6 9 5 4 9 7 4 3 7 1 nbsp Programmierung Bearbeiten Das folgende Beispiel in der Programmiersprache C zeigt die Implementierung des Algorithmus von Hierholzer fur einen ungerichteten Graphen Bei der Ausfuhrung des Programms wird die Methode Main verwendet die den Eulerkreis auf der Konsole ausgibt 3 Code Schnipsel using System using System Collections Generic Deklariert die Klasse fur die Knoten des Graphen class Node public int index public string value public HashSet lt Node gt adjacentNodes new HashSet lt Node gt Menge der Nachbarknoten Deklariert die Klasse fur den ungerichteten Graphen class UndirectedGraph Diese Methode verbindet die Knoten node1 und node2 miteinander public void ConnectNodes Node node1 Node node2 node1 adjacentNodes Add node2 node2 adjacentNodes Add node1 Diese Methode trennt die Knoten node1 und node2 voneinander public void DisconnectNodes Node node1 Node node2 node1 adjacentNodes Remove node2 node2 adjacentNodes Remove node1 class Program Diese Methode gibt den Eulerkreis die als Liste von Knoten ubergeben wird in der Form A B B C C D als Text zuruck public static string EulerCircuitToString List lt Node gt nodeList string text for int i 0 i lt nodeList Count 1 i for Schleife die die Knoten durchlauft text nodeList i value nodeList i 1 value text text Substring 0 text Length 2 return text Diese Methode gibt die Liste der durchlaufenen Knoten zuruck public static List lt Node gt GetEulerCircuitByHierholzer UndirectedGraph undirectedGraph Node startNode List lt Node gt nodeList new List lt Node gt Initialisiert die Liste der durchlaufenen Knoten Stack lt Node gt currentPath new Stack lt Node gt Initialisiert einen Stapelspeicher fur die hinzugefugten Knoten currentPath Push startNode Fugt den Startknoten dem Stapelspeicher hinzu Node currentNode startNode Setzt den Startknoten while currentPath Count 0 So lange der Stapelspeicher fur die hinzugefugten Knoten nicht leer ist if currentNode adjacentNodes Count 0 Wenn noch nicht alle anliegenden Kanten des aktuellen Knotens durchlaufen wurden currentPath Push currentNode Fugt den aktuellen Knoten dem Stapelspeicher hinzu HashSet lt Node gt Enumerator enumerator currentNode adjacentNodes GetEnumerator enumerator MoveNext Node nextNode enumerator Current Setzt den nachsten Knoten auf einen Nachbarknoten des aktuellen Knotens undirectedGraph DisconnectNodes currentNode nextNode Loscht die Kante zwischen aktuellem Knoten und Nachbarknoten currentNode nextNode Setzt den aktuellen Knoten auf den Nachbarknoten else Sonst Backtracking verwenden um einen weiteren Kreis zu finden nodeList Insert 0 currentNode Fugt den aktuellen Knoten am Anfang der Liste der durchlaufenen Knoten ein currentNode currentPath Pop Loscht das oberste Element also den letzten Knoten vom Stapelspeicher return nodeList Hauptmethode die das Programm ausfuhrt public static void Main Deklariert und initialisiert 7 Knoten Node node1 new Node index 0 value A Node node2 new Node index 1 value B Node node3 new Node index 2 value C Node node4 new Node index 3 value D Node node5 new Node index 4 value E Node node6 new Node index 5 value F Node node7 new Node index 6 value G Erzeugt einen ungerichteten Graphen UndirectedGraph undirectedGraph new UndirectedGraph Verbindet Knoten des Graphen miteinander undirectedGraph ConnectNodes node1 node2 undirectedGraph ConnectNodes node1 node7 undirectedGraph ConnectNodes node2 node3 undirectedGraph ConnectNodes node3 node1 undirectedGraph ConnectNodes node3 node4 undirectedGraph ConnectNodes node4 node5 undirectedGraph ConnectNodes node5 node3 undirectedGraph ConnectNodes node5 node6 undirectedGraph ConnectNodes node6 node1 undirectedGraph ConnectNodes node7 node5 List lt Node gt eulerCircuit GetEulerCircuitByHierholzer undirectedGraph node1 Aufruf der Methode die die Liste der durchlaufenen Knoten zuruckgibt if eulerCircuit Count 11 Wenn die Anzahl der durchlaufenen Knoten um 1 grosser als die Anzahl aller Kanten ist string eulerCircuitText EulerCircuitToString eulerCircuit Aufruf der Methode Console WriteLine eulerCircuitText Ausgabe auf der Konsole else Console WriteLine Es existiert kein Eulerkreis Ausgabe auf der Konsole Console ReadLine Hinweise In der Methode GetEulerCircuitByHierholzer werden die Knoten des Eulerkreises in einer Liste gespeichert Die Knoten des aktuell durchlaufenen Kreises werden in einem Stack Stapelspeicher gespeichert Wenn kein Nachbarknoten des aktuell durchlaufenen Knoten erreichbar ist weil alle Kanten dieses Knotens geloscht wurden wird der zuletzt durchlaufene Knoten vom Stack genommen und am Anfang der Liste eingefugt Dabei wird Backtracking ohne rekursive Programmierung verwendet Im Programmbeispiel wird nur einer der moglichen Eulerkreise bestimmt und ausgegeben 3 Algorithmus von Fleury Bearbeiten Im Algorithmus von Fleury spielen Bruckenkanten eine wichtige Rolle Das sind Kanten ohne die der Graph in zwei Komponenten zerfallen wurde Der Algorithmus fugt einer anfangs leeren Kantenfolge alle Kanten eines Graphen hinzu sodass ein Eulerkreis entsteht Wahle einen beliebigen Knoten als aktuellen Knoten Wahle unter den unmarkierten mit dem aktuellen Knoten inzidenten Kanten eine beliebige Kante aus Dabei sind zuerst Kanten zu wahlen die im unmarkierten Graphen keine Bruckenkanten sind Markiere die gewahlte Kante und fuge sie der Kantenfolge hinzu Wahle den anderen Knoten der gewahlten Kante als neuen aktuellen Knoten Wenn noch unmarkierte Kanten existieren dann gehe zu Schritt 2 Ob eine Kante eine Bruckenkante ist kann mittels Tiefensuche in Laufzeit O E displaystyle mathcal O E nbsp uberpruft werden Da pro Schritt eine Kante entfernt wird werden E displaystyle left E right nbsp Iterationen benotigt Die Anzahl der pro Iteration gepruften Kanten entspricht dem Grad des aktuellen Knotens Insgesamt kann die gesamte Anzahl uberprufter Kanten durch O E displaystyle mathcal O E nbsp beschrankt werden Die gesamte Laufzeit ist damit von der Grossenordnung O E 2 displaystyle mathcal O E 2 nbsp Programmierung Bearbeiten Das folgende Beispiel in der Programmiersprache C zeigt die Implementierung des Algorithmus von Fleury fur einen ungerichteten Graphen Der ungerichtete Graph wird als Klasse UndirectedGraph deklariert Bei der Ausfuhrung des Programms wird die Methode Main verwendet die den Eulerkreis oder Eulerpfad auf der Konsole ausgibt 4 Code Schnipsel using System using System Collections Generic Deklariert die Klasse fur die Knoten des Graphen class Node public int index public string value public HashSet lt Node gt adjacentNodes new HashSet lt Node gt Menge der Nachbarknoten Deklariert die Klasse fur den ungerichteten Graphen class UndirectedGraph public HashSet lt Node gt nodes new HashSet lt Node gt Diese Methode verbindet die Knoten node1 und node2 miteinander public void ConnectNodes Node node1 Node node2 node1 adjacentNodes Add node2 node2 adjacentNodes Add node1 Diese Methode trennt die Knoten node1 und node2 voneinander public void DisconnectNodes Node node1 Node node2 node1 adjacentNodes Remove node2 node2 adjacentNodes Remove node1 class Program Diese Methode gibt die Eulerpfad die als Liste von Knoten ubergeben wird in der Form A B B C C D als Text zuruck public static string EulerPathToString List lt Node gt nodeList string text for int i 0 i lt nodeList Count 1 i for Schleife die die Knoten durchlauft text nodeList i value nodeList i 1 value text text Substring 0 text Length 2 return text Diese Methode gibt die Liste der durchlaufenen Knoten zuruck public static List lt Node gt GetEulerPathByFleury UndirectedGraph undirectedGraph Node startNode Behandelt den Fall dass es zwei Knoten mit ungeradem Grad gibt und sucht einen Knoten mit ungeradem Grad foreach Node node in undirectedGraph nodes foreach Schleife die alle Knoten des Graphen durchlauft if node adjacentNodes Count 2 1 Wenn der Grad des aktuellen Knoten ungerade ist startNode node Knoten als Startknoten auswahlen und foreach Schleife verlassen break List lt Node gt nodeList new List lt Node gt Initialisiert die Liste der durchlaufenen Knoten Node nextNode null Referenz auf den jeweils nachsten Knoten der Eulerpfad die gegebenenfalls nach dem vollstandigen Durchlaufen der Kanten fur den letzten Knoten Zielknoten benotigt wird AddNextEulerPathNode undirectedGraph startNode ref nextNode nodeList Aufruf der rekursiven Methode die jeweils den nachsten Knoten hinzufugt if nextNode null nodeList Add nextNode Wenn Referenz nicht null Zielknoten hinzufugen return nodeList Rekursive Methode die jeweils den nachsten Knoten hinzufugt private static void AddNextEulerPathNode UndirectedGraph undirectedGraph Node startNode ref Node nextNode List lt Node gt nodeList HashSet lt Node gt adjacentNodes new HashSet lt Node gt startNode adjacentNodes foreach Node node in adjacentNodes if startNode adjacentNodes Contains node amp amp IsValidNextEdge undirectedGraph startNode node nextNode node nodeList Add startNode undirectedGraph DisconnectNodes startNode node AddNextEulerPathNode undirectedGraph node ref nextNode nodeList Rekursiver Aufruf der Methode Diese Methode pruft ob sich mit der aktuellen Kante die Eulerpfad vervollstandigen lasst private static bool IsValidNextEdge UndirectedGraph undirectedGraph Node node1 Node node2 if node1 adjacentNodes Count 1 amp amp node1 adjacentNodes Contains node2 return true HashSet lt Node gt visitedNodes new HashSet lt Node gt DepthFirstSearch node1 visitedNodes int count1 visitedNodes Count undirectedGraph DisconnectNodes node1 node2 visitedNodes Clear DepthFirstSearch node1 visitedNodes int count2 visitedNodes Count undirectedGraph ConnectNodes node1 node2 return count1 count2 Diese Methode verwendet Tiefensuche um alle erreichbaren Knoten des Graphen zu durchlaufen private static void DepthFirstSearch Node startNode HashSet lt Node gt visitedNodes visitedNodes Add startNode Fugt den aktuellen Knoten der Menge der markierten Knoten hinzu foreach Node node in startNode adjacentNodes foreach Schleife die alle benachbarten Knoten des Knotens durchlauft if visitedNodes Contains node Wenn der Knoten noch nicht markiert wurde DepthFirstSearch node visitedNodes Rekursiver Aufruf der Methode mit dem Nachbarknoten als Startknoten Hauptmethode die das Programm ausfuhrt public static void Main Deklariert und initialisiert 5 Knoten Node node1 new Node index 0 value A Node node2 new Node index 1 value B Node node3 new Node index 2 value C Node node4 new Node index 3 value D Node node5 new Node index 4 value E Deklariert und initialisiert ein Array mit den Knoten Node nodes node1 node2 node3 node4 node5 Erzeugt einen ungerichteten Graphen UndirectedGraph undirectedGraph new UndirectedGraph int numberOfNodes nodes Length for int i 0 i lt numberOfNodes i for Schleife die alle Knoten durchlauft undirectedGraph nodes Add nodes i Fugt die Knoten dem Graphen hinzu Verbindet Knoten des Graphen miteinander undirectedGraph ConnectNodes node2 node1 undirectedGraph ConnectNodes node1 node3 undirectedGraph ConnectNodes node3 node2 undirectedGraph ConnectNodes node1 node4 undirectedGraph ConnectNodes node4 node5 undirectedGraph ConnectNodes node4 node3 undirectedGraph ConnectNodes node4 node2 undirectedGraph ConnectNodes node3 node5 List lt Node gt eulerPath GetEulerPathByFleury undirectedGraph node1 Aufruf der Methode die die Liste der durchlaufenen Knoten zuruckgibt if eulerPath Count 9 Wenn die Anzahl der durchlaufenen Knoten um 1 grosser als die Anzahl aller Kanten ist string eulerPathText EulerPathToString eulerPath Aufruf der Methode Console WriteLine eulerPathText Ausgabe auf der Konsole else Console WriteLine Es existiert kein Eulerpfad Ausgabe auf der Konsole Console ReadLine Hinweise Sowohl fur das Referenzieren der Knoten des ungerichteten Graphen als auch fur das Referenzieren der Nachbarknoten jedes Knoten wird ein HashSet Menge als Datentyp verwendet und mit foreach Schleifen durchlaufen Der Vorteil des HashSet fur die Nachbarknoten im Vergleich zu einer Liste ist dass dann meist viel schneller namlich mit konstanter Laufzeit gepruft werden kann ob ein bestimmter Knoten Nachbarknoten eines anderen Knoten ist siehe Hashtabelle Vorteile Ein Nachteil ist dass dann die Reihenfolge der durchlaufenen Knoten in den foreach Schleifen und damit auch die Reihenfolge der ausgegebenen Knoten des Eulerpfads nicht eindeutig oder teilweise zufallig ist Im Programmbeispiel wird nur einer der moglichen Eulerpfade bestimmt und ausgegeben falls einer existiert Statt dem HashSet Menge visitedNodes kann auch eine Liste oder ein Array vom Typ bool Boolesche Variable verwendet werden wie im Einzelnachweis gezeigt 4 Vermutung von Hajos BearbeitenNach der im Allgemeinen ungelosten Zyklenvermutung von Gyorgy Hajos uber Kreiszerlegung von Eulergraphen von 1968 konnen Eulergraphen mit n displaystyle n nbsp Knoten in hochstens 1 2 n 1 displaystyle frac 1 2 n 1 nbsp Kreise zerlegt werden Die Vermutung wurde fur kleine Graphen n 12 displaystyle n leq 12 nbsp 2017 bewiesen 5 und fur Pfadweite kleiner oder gleich 6 6 Anwendungsbeispiele BearbeitenDas Konigsberger Bruckenproblem Bearbeiten Das Konigsberger Bruckenproblem lasst sich in folgendem Graphen ausdrucken nbsp Graph fur das Konigsberger BruckenproblemDie Kreise Knoten sind die jeweiligen Stadtteile bzw Standpunkte Die Linien Kanten sind die Brucken Durch Probieren wird herausgefunden dass es nicht moglich ist einen Rundgang durch die Stadt zu finden bei dem jede Brucke genau ein einziges Mal benutzt wird Es gibt also keinen Eulerweg und demzufolge auch keinen Eulerkreis Warum ist das so Euler hat die folgende Gesetzmassigkeit entdeckt Wenn in einem Graphen G ein Eulerweg existiert dann haben maximal 2 Knoten ungeraden Grad Beim Konigsberger Bruckengraphen gibt es vier Knoten mit ungeradem Grad Die Zahlen neben den Knoten geben in der Abbildung deren Grad an Deshalb ist der Stadtrundgang mit dem nur einmaligen Benutzen jeder Brucke unmoglich Ein ungerader Knoten ist entweder Anfang oder Ende des Weges uber die Brucken null ungerade Knoten wurde bedeuten dass Anfang und Ende des Weges in Konigsberg identisch sind Ein Weg mit Anfang und Ende hatte maximal zwei ungerade Knoten Ergo ist es in Konigsberg nicht moglich gewesen alle Brucken in einem Wege nur jeweils einmal zu begehen Das Haus vom Nikolaus Bearbeiten Hauptartikel Haus vom Nikolaus Das beliebte Kinderratsel Das ist das Haus vom Nikolaus hingegen enthalt einen Eulerweg aber keinen Eulerkreis da sein Graph zwei Knoten vom Grad 3 enthalt nbsp Solch ein Eulerweg ist 1 2 4 3 1 4 5 3 2 Knoten 1 und 2 haben jeweils 3 Nachbarn ihr Grad ist also ungerade Um das Haus in einem Zug zeichnen zu konnen muss daher an einem dieser beiden Punkte begonnen werden Ein Quadrat mit Diagonalen enthalt keinen Eulerweg da alle seine Knoten den Grad 3 haben Im Bild sind das nur die Punkte 1 2 3 4 mit den verbindenden Kanten Siehe auch BearbeitenHamiltonkreisproblemLiteratur BearbeitenWladimir Velminski Leonhard Euler Die Geburt der Graphentheorie Kulturverlag Kadmos Berlin 2008 ISBN 978 3 86599 056 3 Reinhard Diestel Graphentheorie 3 Auflage Springer 2006 ISBN 3 540 21391 0 S 23 24Einzelnachweise Bearbeiten Brian Hopkins Robin J Wilson The Truth about Konigsberg In The College Mathematics Journal Band 35 Nr 3 2004 Paragraphen 20 und 21 doi 10 1080 07468342 2004 11922073 Hierholzer Uber die Moglichkeit einen Linienzug ohne Wiederholung und ohne Unterbrechung zu umfahren Mathematische Annalen Bd 6 1873 S 30 32 Online a b GeeksforGeeks Hierholzer s Algorithm for directed graph a b GeeksforGeeks Fleury s Algorithm for printing Eulerian Path or Circuit Irene Heinrich Marco Natale Manuel Streicher Hajos cycle conjecture for small graphs Arxiv 2017 Elke Fuchs Laura Gellert Irene Heinrich Cycle decompositions of pathwidth 6 graphs Arxiv 2017 Abgerufen von https de wikipedia org w index php title Eulerkreisproblem amp oldid 234172158