Königsberger Brückenproblem oder etwas Graphentheorie mit jgrapht in Java

Das Königsberger Brückenproblem ist eine klassische mathematische Herausforderung, die im 18. Jahrhundert entstand und einen wichtigen Einfluss auf die Entwicklung der Graphentheorie hatte. Es handelt sich um eine Fragestellung bezüglich der Überquerung von Brücken über den Flüssen Pregel und seinen Inseln in der Stadt Königsberg (heute Kaliningrad, Russland). Das Problem wurde erstmals von dem Schweizer Mathematiker Leonhard Euler im Jahr 1735 gelöst und legte den Grundstein für die moderne Graphentheorie.

In Königsberg gab es sieben Brücken, die die Flüsse Pregel und die beiden Inseln verbunden haben. Die Frage war, ob es möglich war, die Stadt zu durchqueren, indem man jede Brücke nur einmal überquerte und schließlich an einem beliebigen Punkt endete.

Euler bewies, dass es keine Möglichkeit gibt, das Königsberger Brückenproblem zu lösen. Er zeigte, dass mindestens zwei der vier Landpunkte eine ungerade Anzahl von Brücken haben müssten, um eine Lösung unmöglich zu machen. Dies führte zur Entwicklung der Graphentheorie, bei der das Problem als ein Graph dargestellt werden kann, wobei die Landpunkte die Knoten und die Brücken die Kanten des Graphen sind.

Da kommt nun die Implementierung mit JGraphT in Java ins Spiel.

JGraphT ist eine Java-Bibliothek, die es ermöglicht, Graphen einfach zu erstellen, zu manipulieren und zu analysieren.

Hier ist ein Beispiel, wie das Königsberger Brückenproblem mit JGraphT in Java implementiert werden kann.

Zuerst müssen Sie die JGraphT-Bibliothek zu Ihrem Projekt hinzufügen. Dies kann normalerweise durch das Hinzufügen einer Abhängigkeit in Ihrer Build-Datei (z.B. Maven pom.xml) erfolgen.

Dann können wir in Java den ungerichteten Graphen mit der Multigraph Klasse erzeugen:

Wir können auch eine dot Datei erzeugen:

Die kann dann leicht mit

dot -T png -o koenigsberger-dot.png $inputDateiname

in diese Grafik übersetzt werden.

Die Frage war, ob es einen Weg gibt, bei dem man alle sieben Brücken genau einmal überquert, und wenn ja, ob auch ein Rundweg möglich ist, bei dem man wieder zum Ausgangspunkt gelangt. Leonhard Euler bewies 1736, dass ein solcher Weg bzw. Eulerscher Weg in Königsberg nicht möglich war, da zu allen vier Ufergebieten bzw. Inseln eine ungerade Zahl von Brücken führte. Es dürfte maximal zwei Ufer (Knoten) mit einer ungeraden Zahl von angeschlossenen Brücken (Kanten) geben. Diese zweiUfer könnten Ausgangs- bzw. Endpunkt sein. Die restlichen Ufer müssten eine gerade Anzahl von Brücken haben, um sie auch wieder auf einem neuen Weg verlassen zu können.

Durch Kriegseinwirkung und Umbauten nach 1945 ist die ursprüngliche Situation im heutigen Kaliningrad nicht mehr gegeben. Zwei der zur Insel Kneiphof führenden Brücken existieren nicht mehr; am nördlichen und südlichen Ufer enden nur noch jeweils zwei anstatt drei Brücken. Nun ist zwar ein Eulerweg möglich, jedoch noch immer kein Eulerkreis.

Zum überprüfen des Graph ob er einen „Eulerschen Weg“ ermöglicht, kann die die HierholzerEulerianCycle Klasse wie folgt aufgerufen werden.

Hier gibt es auch eine schöne Online-Seite dazu.

Das Königsberger Brückenproblem hat nicht nur die Graphentheorie beeinflusst, sondern auch dazu beigetragen, die Grundlagen für das Verständnis von Netzwerken und Verbindungen zu legen. Durch die Verwendung von JGraphT und anderen modernen Technologien können wir diese historische mathematische Herausforderung mühelos in Java implementieren und verstehen, wie graphentheoretische Konzepte auf reale Probleme angewendet werden können.

Das ganze Projekt und auch die JUnit-Test kann von hier geclont werden. Auch gibt es dort noch einige Bilder zu dem Thema bzw. Scripte.

Hier noch der Graph, von dem ganzen Projekt:

oder wer es als Video sehen will.