LaTeX Extra > LaTeX Pakete > Dijkstra


dijkstra Paket

Das dijkstra Paket (Version v0.12, 25. Juni 2020) kann zur Lösung des Dijkstra Algorithmus für gewichtete Graphen, gerichtet oder ungerichtet verwendet werden.[1] Das Paket selbst kann nicht zum Zeichen der Graphen genutzt werden, es führt die entsprechenden Schritte der Berechnung durch und gibt diese Schritte in der Form einer Tabelle aus. Daneben gibt es noch die Möglichkeit sich die Distanz und den Verbindungspfad zwischen den zwei betrachteten Punkten ausgeben zu lassen. Die Graphen können zum Beispiel mithilfe des Paketes adigraph beziehungsweise mit den Paket tkz-graph gezeichnet werden. Alternativ kann der Graph auch manuell mit tikz beziehungsweise innerhalb der picture Umgebung gesetzt werden.

Paket einbinden

Das Paket wird mit \usepackage{dijkstra} eingebunden und bindet seinerseits das simplekv Paket ein. Zur Zeit verfügt das Paket über keine Optionen.

Befehle

Der Befehl \readgraph{...} wird verwendet um die Adjazenzliste eines ungerichteten Graphen, hier die benachbarten Knoten und die Gewichte der Kanten einzugeben. Im Fall eines gerichteten Graphen wird anstelle des Befehls \readgraph{...} der Befehl \readgraph*{...} verwendet. Dabei ist zu beachten, dass nur ganze positive Zahlen verwendet werden können. Nachdem der Graph eingegeben wurde, wird mit dem Befehl \dijkstra{Start Knoten}{Ende Knoten} die Tabelle, mit den Ergebnissen des Dijkstra Algorithmus erstellt und ausgegeben. Anhand der gleichen Daten (Graph) kann mit dem Befehl \dijkdist die Distanz und mit dem Befehl \dijkpath der Pfad zwischen dem Start und dem Ende Knoten ausgeben werden.

Beispiel

Das nachfolgende Beispiel zeigt einen ungerichteten Graph mit den Knoten V = {A,B,C,D,E,F} und den Kanten E = {{A,B},{A,D},{B,C},{B,E},{B,F},{C,D},{C,F},{D,E},{E,F}}, und seine Repräsentation mit Hilfe von Adjazenzlisten.

GraphAdjazenzlisten
Beispiel für einen ungerichteten Grahpen mit sechs Knoten. A: B, D
B: C, E, F
C: D, F
D: E
E: F

In der folgenden Abbildung wurde die Kanten mit einer Gewichtung versehen. Anhand der Adjazenzlisten und der Gewichtungen der Kanten wurden dann die entsprechenden Werte im \readgraph{...} Befehl gesetzt.

Graph readgraph Befehl
Beispiel für einen ungerichteten gewichteten Grahpen mit sechs Knoten. \readgraph{
A [B=7, D=15],
B [C=12, E=4, F=16],
C [D=5, F=3],
D [E=2],
E [F=14]}

Nachdem die Werte des Graphen durch den readgraph Befehl für die Berechnung zur Verfügung gestellt worden sind, kann diese mit dem \dijkstra{Start Knoten}{Ende Knoten} Befehl durchgeführt werden. Als Start Knoten wird der Knoten A und als Ende Knoten der Knote F gewählt. Neben der Berechnungstabelle sollen auch der Abstand und der Pfad zwischen den zwei Knoten A und F ausgegeben werden.

AusgabeEingabe
Tabelle
ABCDEF
0
-- 7A 15A
-- -- 19B 15A 11B 23B
-- -- 19B 13E -- 23B
-- -- 18D -- -- 23B
-- -- -- -- -- 21C
Distanz A-F = 21
Pfad = A-B-E-D-C-F
 \begin{center}
   Tabelle \\ 
 \dijkstra{A}{F}
 \end{center}
 Distanz A-F = \dijkdist\\ 
 Pfad = \dijkpath
gerichteter gewichteter Graph

Im Fall eines gerichteten Graphen werden anstelle der Nachbarknoten die Nachfolger erfasst. Und anstelle des Befehls \readgraph{...} wird die Stern Variante des Befehls \readgraph*{...} verwendet. Die drei anderen Befehle \dijkstra, \dijkdist und \dijkpath können wie gewohnt verwendet werden. Anhand des nachfolgenden Haus des Nikolaus wird die Funktionsweise im Fall eines gerichteten gewichteten Graphen gezeigt. Die gesuchte Verbindung liegt dabei zwischen den Knoten D und C.

Das Haus des Nikolaus als gerichter gewichteter Graph.
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{dijkstra}
\usepackage{adigraph}
\begin{document}

\NewAdigraph{Nikolaus}{
A:0,0;
B:2,0;
C:2,2;
D:0,2;
E:1,3.4}{
A,B:2; B,C:2;
C,A:6::near start; A,D:4;
D,E:5; E,C:8;
C,D:1; D,B:2::near start;
}

\begin{center}
\Nikolaus{}\par 
\bigskip
\readgraph*{
A [B=2, D=4],
B [C=2],
C [A=6, D=1],
D [E=5, B=2],
E [C=8]}

Tabelle \\
\dijkstra{D}{C}\\ \bigskip
Distanz D - C = \dijkdist\\
Pfad = \dijkpath
\end{center}
\end{document}

Hinweise

Das Paket bietet eine große Auswahl an Optionen zur Gestaltung der Ausgabe der Tabelle.

Das Zeichen der Graphen ist für die Berechnungen nicht notwendig, es diente hier der Illustration.

Auch wenn hier für die Zeichnungen des adigraph Paket verwendet worden ist, sind die Berechnung unabhängig von diesem Paket erfolgt, es diente alleine der Darstellung der Graphen. Ob und wie die Graphen gezeichnet werden hat keinen Einfluss auf die Berechnung.

Literatur

[1]
dijkstra, Christian TELLECHEA, 25 juin 2020, Online:https://ctan.org/pkg/dijkstra