<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Algorithmus_von_Floyd_und_Warshall</id>
	<title>Algorithmus von Floyd und Warshall - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Algorithmus_von_Floyd_und_Warshall"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Algorithmus_von_Floyd_und_Warshall&amp;action=history"/>
	<updated>2026-06-03T08:06:47Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Algorithmus_von_Floyd_und_Warshall&amp;diff=164905&amp;oldid=prev</id>
		<title>imported&gt;Wieggy: weitere Ergänzungen</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Algorithmus_von_Floyd_und_Warshall&amp;diff=164905&amp;oldid=prev"/>
		<updated>2025-01-29T18:11:23Z</updated>

		<summary type="html">&lt;p&gt;weitere Ergänzungen&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Der &amp;#039;&amp;#039;&amp;#039;Algorithmus von Floyd und Warshall&amp;#039;&amp;#039;&amp;#039; (auch &amp;#039;&amp;#039;Floyd-Warshall-Algorithmus&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;Tripel-Algorithmus&amp;#039;&amp;#039;), benannt nach [[Robert Floyd]] und [[Stephen Warshall]], ist ein [[Algorithmus]] der [[Graphentheorie]]. In Floyds Version findet er die [[Kürzester Pfad|kürzesten Pfade]] zwischen allen Paaren von Knoten eines [[Graph (Graphentheorie)|Graphen]] und berechnet deren Länge (&amp;#039;&amp;#039;APSP, all-pairs shortest path&amp;#039;&amp;#039;). In Warshalls Version findet er die [[Transitive Hülle (Relation)|transitive Hülle]] eines Graphen. Beide Versionen wurden 1962 vorgestellt und gehen auf einen Algorithmus zurück, den [[Stephen Kleene]] 1956 im Zusammenhang mit [[regulärer Ausdruck|regulären Ausdrücken]] veröffentlicht hat.&lt;br /&gt;
&lt;br /&gt;
== Beschreibung ==&lt;br /&gt;
Der Floyd-Warshall-Algorithmus basiert auf dem Prinzip der [[dynamische Programmierung|dynamischen Programmierung]].&lt;br /&gt;
&lt;br /&gt;
Der Floyd-Algorithmus geht von folgender Beobachtung aus:&lt;br /&gt;
&lt;br /&gt;
Geht der kürzeste Weg von &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; nach &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; durch &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt;, dann sind die enthaltenen Teilpfade von &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; nach &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt; und von &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt; nach &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; schon minimal. Nimmt man also an, man kennt schon die kürzesten Wege zwischen allen Knotenpaaren, die nur über [[Knoten (Graphentheorie)|Knoten]] mit Index kleiner als &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; führen, und man sucht alle kürzesten Wege über Knoten mit Index höchstens &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, dann hat man für einen [[Weg (Graphentheorie)|Pfad]] von &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; nach &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; zwei Möglichkeiten: Entweder er geht über den Knoten &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, dann setzt er sich zusammen aus schon bekannten Pfaden von &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; nach &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; und von &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; nach &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt;, oder es ist der schon bekannte Weg von &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; nach &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; über Knoten mit Index kleiner als &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Angenommen, der [[Graph (Graphentheorie)|Graph]] ist gegeben durch seine [[Adjazenzmatrix|Gewichtsmatrix]] &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;w\left[i,j\right]&amp;lt;/math&amp;gt; ist das Gewicht der Kante von &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; nach &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;, falls eine solche Kante existiert. Falls es keine [[Kante (Graphentheorie)|Kante]] von &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; nach &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; gibt, ist &amp;lt;math&amp;gt;w\left[i,j\right]&amp;lt;/math&amp;gt; unendlich.&lt;br /&gt;
&lt;br /&gt;
Dann kann man die [[Matrix (Mathematik)|Matrix]] &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; der kürzesten Distanzen durch folgendes Verfahren bestimmen:&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;Algorithmus von Floyd&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 (1) Für alle &amp;lt;math&amp;gt;i,j  : d\left[i,j\right] = w\left[i,j\right]&amp;lt;/math&amp;gt;&lt;br /&gt;
 (2) Für &amp;lt;math&amp;gt;k = 1&amp;lt;/math&amp;gt; bis &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
 (3)   Für alle Paare &amp;lt;math&amp;gt;i,j&amp;lt;/math&amp;gt;&lt;br /&gt;
 (4)     &amp;lt;math&amp;gt;d\left[i,j\right] = \min (d\left[i,j\right],d\left[i,k\right] + d\left[k,j\right])&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Will man die [[transitive Hülle (Relation)|transitive Hülle]] berechnen, ändert man den Algorithmus folgendermaßen ab:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt; ist die [[Adjazenzmatrix]], das heißt, &amp;lt;math&amp;gt;w\left[i,j\right]&amp;lt;/math&amp;gt; ist 1, falls eine Kante von &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; nach &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; existiert, und 0, falls keine Kante existiert.&lt;br /&gt;
&lt;br /&gt;
Die Matrix &amp;lt;math&amp;gt;d&amp;lt;/math&amp;gt; wird so definiert, dass &amp;lt;math&amp;gt;d[i,j]= 1&amp;lt;/math&amp;gt;, genau dann, wenn ein [[Weg (Graphentheorie)|Pfad]] von &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; nach &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; existiert:&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;Algorithmus von Warshall&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 (1) Für &amp;lt;math&amp;gt;k = 1&amp;lt;/math&amp;gt; bis &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
 (2)   Für &amp;lt;math&amp;gt;i = 1&amp;lt;/math&amp;gt; bis &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
 (3)     Falls &amp;lt;math&amp;gt;d\left[i,k\right] = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
 (4)       Für &amp;lt;math&amp;gt;j = 1&amp;lt;/math&amp;gt; bis &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
 (5)         Falls &amp;lt;math&amp;gt;d\left[k,j\right] = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
 (6)           &amp;lt;math&amp;gt;d\left[i,j\right] = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Zeile (6) wird &amp;lt;math&amp;gt;d\left[i,j\right]&amp;lt;/math&amp;gt; auf 1 gesetzt, genau dann, wenn ein Pfad von &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; nach &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; und ein Pfad von &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; nach &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; über [[Kante (Graphentheorie)|Kanten]] mit Index kleiner als &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; existiert.&lt;br /&gt;
&lt;br /&gt;
Der Floyd-Algorithmus funktioniert auch, wenn die Kanten negatives Gewicht haben. [[Zyklus (Graphentheorie)|Zyklen]] mit negativer Länge werden (anders als beim [[Bellman-Ford-Algorithmus]]) jedoch nicht erkannt und führen zu einem falschen Ergebnis. Erkennbar sind negative Zyklen aber im Nachhinein durch negative Werte auf der [[Hauptdiagonale]]n der [[Distanzmatrix]]. Um numerische Probleme zu vermeiden, sollte man dies aber nicht erst im Nachhinein testen, sondern jedes Mal, wenn in Zeile (4) ein Diagonalelement geändert wird.&amp;lt;ref&amp;gt;&lt;br /&gt;
{{cite journal&lt;br /&gt;
 | title =   The Floyd–Warshall algorithm on graphs with negative cycles&lt;br /&gt;
 | author =  Stefan Hougardy&lt;br /&gt;
 | journal = Information Processing Letters&lt;br /&gt;
 | url = http://www.sciencedirect.com/science/article/pii/S002001901000027X&lt;br /&gt;
 | volume = 110 &lt;br /&gt;
 | issue = 8–9&lt;br /&gt;
 | date = 2010-04&lt;br /&gt;
 | pages = 279–281&lt;br /&gt;
 | language = en&lt;br /&gt;
 | doi=10.1016/j.ipl.2010.02.001&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zeitkomplexität ==&lt;br /&gt;
Die Laufzeit ([[Komplexitätstheorie|Komplexität]]) des Floyd-Warshall-Algorithmus liegt in &amp;lt;math&amp;gt; \mathcal{O}(n^3) &amp;lt;/math&amp;gt;, weil für die drei [[Variable (Programmierung)|Variablen]] &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; die Werte von 1 bis &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; durchlaufen werden müssen. Dabei ist &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; Anzahl der [[Knoten (Graphentheorie)|Knoten]] des [[Graph (Graphentheorie)|Graphen]].&lt;br /&gt;
&lt;br /&gt;
== Vergleich mit anderen Algorithmen ==&lt;br /&gt;
Der Floyd-Warshall-Algorithmus ist eine gute Wahl für die Berechnung von [[Pfad (Graphentheorie)|Pfaden]] zwischen allen Knotenpaaren in dichten [[Graph (Graphentheorie)|Graphen]], in denen die meisten oder alle Knotenpaare mit [[Kante (Graphentheorie)|Kanten]] verbunden sind. Für dünne Graphen mit nicht-negativen Kantengewichten ist es besser, den [[Dijkstra-Algorithmus]] von jedem möglichen Startknoten aus zu verwenden, weil die [[Laufzeit (Informatik)|Laufzeit]] von wiederholtem Dijkstra &amp;lt;math&amp;gt;O(|E||V|+|V|^2\log|V|)&amp;lt;/math&amp;gt; unter Verwendung von [[Fibonacci-Heap|Fibonacci-Heaps]] besser ist als die Laufzeit &amp;lt;math&amp;gt;O(|V|^3)&amp;lt;/math&amp;gt; des Floyd-Warshall-Algorithmus, wenn &amp;lt;math&amp;gt;|E|&amp;lt;/math&amp;gt; (E. Edges, Kanten) signifikant kleiner als &amp;lt;math&amp;gt;|V|^2&amp;lt;/math&amp;gt; ist (V. Vertices, Knoten). Für dünne Graphen mit negativen Kanten, aber ohne negative [[Zyklus (Graphentheorie)|Zyklen]] kann der [[Algorithmus von Johnson]] mit derselben [[Asymptotische Laufzeit|asymptotischen Laufzeit]] wie der wiederholte Dijkstra-Ansatz verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Es sind auch [[Algorithmus|Algorithmen]] bekannt, die eine schnelle [[Matrixmultiplikation]] verwenden, um die Berechnung des [[Kürzester Pfad|kürzesten Pfades]] zwischen allen Knotenpaaren in dichten [[Graph (Graphentheorie)|Graphen]] zu beschleunigen, aber diese machen typischerweise zusätzliche Annahmen über die Kantengewichte, z. B. erfordern sie kleine ganze Zahlen. Aufgrund der hohen konstanten Faktoren in ihrer [[Laufzeit (Informatik)|Laufzeit]] würden sie außerdem nur bei sehr großen Graphen eine Beschleunigung gegenüber dem Floyd-Warshall-Algorithmus bewirken.&amp;lt;ref&amp;gt;{{Literatur |Autor=Uri Zwick |Titel=All Pairs Shortest Paths using Bridging Sets and Rectangular Matrix Multiplication |DOI=10.48550/arXiv.cs/0008011 |Datum=2024-04-26 |Sprache=en |Online=https://arxiv.org/pdf/cs/0008011.pdf |Format=PDF}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Programmierung ==&lt;br /&gt;
Das folgende Beispiel in der [[Programmiersprache]] [[C-Sharp|C#]] zeigt eine Implementierung des Floyd-Warshall-Algorithmus. eines [[Gerichteter Graph|gerichteten Graphen]]. Bei der Ausführung des Programms wird die [[Methode (Programmierung)|Methode]] &amp;#039;&amp;#039;Main&amp;#039;&amp;#039; verwendet, die die kürzesten [[Abstand|Abstände]] zwischen allen Paaren von [[Knoten (Graphentheorie)|Knoten]] auf der Konsole ausgibt. Die [[Matrix (Mathematik)|Matrix]] für die Abstände wird in einem zweidimensionalen [[Feld (Datentyp)|Array]] vom [[Datentyp]] [[Integer (Datentyp)|Integer]] gespeichert. Bei nicht verbundenen Knoten wird der Wert [[Unendlichkeit|unendlich]] ausgegeben.&amp;lt;ref&amp;gt;{{Internetquelle |url=https://www.geeksforgeeks.org/floyd-warshall-algorithm-dp-16/ |titel=Floyd Warshall Algorithm |werk=geeksforgeeks |datum=2025-01-29 |abruf=2025-01-29 |sprache=en}}&amp;lt;/ref&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;c#&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
&lt;br /&gt;
public class Program&lt;br /&gt;
{&lt;br /&gt;
	// Diese Methode gibt die kürzesten Abstände zwischen allen Paaren von Knoten zurück.&lt;br /&gt;
    static int[,] FloydWarshall(int[,] adjacencyMatrix, int numberOfNodes)&lt;br /&gt;
    {&lt;br /&gt;
        int[,] distances = new int[numberOfNodes, numberOfNodes]; // Deklariert die Matrix für die kürzesten Abstände als zweidimensionales Array vom Typ int&lt;br /&gt;
        // Initialisiert die Matrix für die kürzesten Abstände mit den Eingabewerten&lt;br /&gt;
        for (int i = 0; i &amp;lt; numberOfNodes; i++)&lt;br /&gt;
        {&lt;br /&gt;
            for (int j = 0; j &amp;lt; numberOfNodes; j++)&lt;br /&gt;
            {&lt;br /&gt;
                distances[i, j] = adjacencyMatrix[i, j];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        // Aktualisiert die Abstände zwischen allen Paaren von Knoten&lt;br /&gt;
        for (int k = 0; k &amp;lt; numberOfNodes; k++) // for-Schleife, die alle Knoten durchläuft, über die der Pfad zwischen den Knoten mit den Indexen i und j verläuft&lt;br /&gt;
        {&lt;br /&gt;
        	// Diese beiden for-Schleifen durchlaufen alle Paare von Knoten&lt;br /&gt;
            for (int i = 0; i &amp;lt; numberOfNodes; i++)&lt;br /&gt;
            {&lt;br /&gt;
                for (int j = 0; j &amp;lt; numberOfNodes; j++)&lt;br /&gt;
                {&lt;br /&gt;
                    if (distances[i, k] + distances[k, j] &amp;lt; distances[i, j]) // Wenn der Knoten mit dem Index k auf dem kürzesten Pfad zwischen den Knoten mit den Indexen i und j liegt&lt;br /&gt;
                    {&lt;br /&gt;
                        distances[i, j] = distances[i, k] + distances[k, j]; // Aktualisiert den Abstand zwischen den Knoten mit den Indexen i und j&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
		return distances; // Gibt das zweidimensionale Array mit den kürzesten Abstände zurück&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
	// Hauptmethode, die das Programm ausführt&lt;br /&gt;
    public static void Main(string[] args)&lt;br /&gt;
    {&lt;br /&gt;
        int numberOfNodes = 4;&lt;br /&gt;
        int threshold = int.MaxValue / numberOfNodes; // Schwellenwert für nicht verbundene Knoten&lt;br /&gt;
        int[,] distanceMatrix = { {0, 5, threshold, 10},&lt;br /&gt;
        	{threshold, 0, 3, threshold},&lt;br /&gt;
        	{threshold, threshold, 0, 1},&lt;br /&gt;
        	{threshold, threshold, threshold, 0} }; // Deklariert und initialisiert die Matrix mit den Abständen zwischen allen Punkten als zweidimensionales Array vom Typ int&lt;br /&gt;
        int[,] distances = FloydWarshall(distanceMatrix, numberOfNodes); // Aufruf der Methode&lt;br /&gt;
        &lt;br /&gt;
        // Gibt die Matrix mit den kürzesten Abständen auf der Konsole aus&lt;br /&gt;
        Console.WriteLine(&amp;quot;Matrix mit den kürzesten Abständen zwischen allen Punkten&amp;quot;);&lt;br /&gt;
        for (int i = 0; i &amp;lt; numberOfNodes; i++)&lt;br /&gt;
        {&lt;br /&gt;
        	for (int j = 0; j &amp;lt; numberOfNodes; j++)&lt;br /&gt;
            {&lt;br /&gt;
                if (distances[i, j] &amp;gt;= threshold) // Wenn der Schwellenwert überschritten ist, wird &amp;quot;INF&amp;quot; (unendlich) ausgegeben&lt;br /&gt;
                {&lt;br /&gt;
                    Console.Write(&amp;quot;INF&amp;quot; + &amp;quot;\t&amp;quot;); // Ausgabe auf der Konsole&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    Console.Write(distances[i, j] + &amp;quot;\t&amp;quot;); // Ausgabe auf der Konsole&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            Console.WriteLine(); // Neue Zeile&lt;br /&gt;
        }&lt;br /&gt;
		&lt;br /&gt;
		Console.ReadLine();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
Der Algorithmus wird auf dem Graphen links unten mit vier [[Knoten (Graphentheorie)|Knoten]] ausgeführt:&lt;br /&gt;
&lt;br /&gt;
[[Datei:Floyd-Warshall example.svg|rahmenlos|alternativtext=|600x600px]]&lt;br /&gt;
&lt;br /&gt;
Vor dem ersten Durchlauf der äußeren Schleife, oben mit k = 0 bezeichnet, entsprechen die einzigen bekannten [[Pfad (Graphentheorie)|Pfade]] den einzelnen Kanten im [[Diagramm]]. Bei k = 1 werden Pfade gefunden, die durch den [[Knoten (Graphentheorie)|Knoten]] 1 verlaufen: Insbesondere wird der Pfad [2,1,3] gefunden, der den Pfad [2,3] ersetzt, der weniger [[Kante (Graphentheorie)|Kanten]] hat, aber länger ist. Bei k = 0 ist d[2, 3] = 3 und bei k = 1 wird dieser Wert mit d[2, 3] = d[2, 1] + d[1, 3] = 4 + (-2) = 2 überschrieben. Bei k = 2 werden Pfade gefunden, die durch die Knoten {1,2} verlaufen. Die roten und blauen Kästchen zeigen, wie der Pfad [4,2,1,3] aus den beiden bekannten Pfaden [4,2] und [2,1,3] zusammengesetzt wird, die in früheren Iterationen mit dem Schnittpunkt 2 angetroffen wurden. Der Pfad [4,2,3] wird nicht berücksichtigt, da [2,1,3] der kürzeste Pfad ist, der bisher von 2 bis 3 angetroffen wurde. Bei k = 3 werden alle Pfade gefunden, die durch die Knoten {1,2,3} verlaufen. Schließlich werden bei k = 4 alle kürzesten Pfade gefunden.&lt;br /&gt;
&lt;br /&gt;
Die [[Distanzmatrix]] bei jeder [[Iteration]] von k mit den aktualisierten Abständen in Fettdruck lautet:&lt;br /&gt;
{| class=wikitable style=&amp;quot;float:left; margin:10px; text-align:center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; |k = 0&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |j&lt;br /&gt;
|-&lt;br /&gt;
! 1 !! 2 !! 3 !! 4&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; |i&lt;br /&gt;
! 1&lt;br /&gt;
| 0 || &amp;amp;infin; || −2 || &amp;amp;infin;&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| 4 || 0 || 3 || &amp;amp;infin;&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &amp;amp;infin; || &amp;amp;infin; || 0 || 2&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &amp;amp;infin; || −1 || &amp;amp;infin; || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable style=&amp;quot;float:left; margin:10px; text-align:center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; |k = 1&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |j&lt;br /&gt;
|-&lt;br /&gt;
! 1 !! 2 !! 3 !! 4&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; |i&lt;br /&gt;
! 1&lt;br /&gt;
| 0 || &amp;amp;infin; || −2 || &amp;amp;infin;&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| 4 || 0 || &amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039; || &amp;amp;infin;&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &amp;amp;infin; || &amp;amp;infin; || 0 || 2&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &amp;amp;infin; || −1 || &amp;amp;infin; || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable style=&amp;quot;float:left; margin:10px; text-align:center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; |k = 2&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |j&lt;br /&gt;
|-&lt;br /&gt;
! 1 !! 2 !! 3 !! 4&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; |i&lt;br /&gt;
! 1&lt;br /&gt;
| 0 || &amp;amp;infin; || −2 || &amp;amp;infin;&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| 4 || 0 || 2 || &amp;amp;infin;&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &amp;amp;infin; || &amp;amp;infin; || 0 || 2&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039; || −1 || &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable style=&amp;quot;float:left; margin:10px; text-align:center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; |k = 3&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |j&lt;br /&gt;
|-&lt;br /&gt;
! 1 !! 2 !! 3 !! 4&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; |i&lt;br /&gt;
! 1&lt;br /&gt;
| 0 || &amp;amp;infin; || −2 || &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| 4 || 0 || 2 ||&amp;#039;&amp;#039;&amp;#039;4&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &amp;amp;infin; || &amp;amp;infin; || 0 || 2&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| 3 || −1 || 1 || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable style=&amp;quot;float:left; margin:10px; text-align:center;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; rowspan=&amp;quot;2&amp;quot; |k = 4&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; |j&lt;br /&gt;
|-&lt;br /&gt;
! 1 !! 2 !! 3 !! 4&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; |i&lt;br /&gt;
! 1&lt;br /&gt;
| 0 || &amp;#039;&amp;#039;&amp;#039;−1&amp;#039;&amp;#039;&amp;#039; || −2 || 0&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| 4 || 0 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;5&amp;#039;&amp;#039;&amp;#039; || &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; || 0 || 2&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| 3 || −1 || 1 || 0&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Andere Verfahren zur Berechnung kürzester Pfade ==&lt;br /&gt;
* [[Min-Plus-Matrixmultiplikations-Algorithmus]]&lt;br /&gt;
* [[A*-Algorithmus]]&lt;br /&gt;
* [[Algorithmus von Dijkstra]]&lt;br /&gt;
* [[Bellman-Ford-Algorithmus]]&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* {{Literatur |Autor=Robert W. Floyd |Titel=Algorithm 97 – SHORTEST PATH |DOI=10.1145/367766.368168 |Sammelwerk=Communications of the [[Association for Computing Machinery|ACM]] |Nummer=5 |Band=6 |Seiten=345 |Datum=1962 |Sprache=en}}&lt;br /&gt;
* {{Literatur |Autor=Stephen Warshall |Titel=A Theorem on Boolean Matrices |DOI=10.1145/321105.321107 |Sammelwerk=Communications of the ACM |Nummer=9 |Band=1 |Seiten=11-12 |Datum=1962 |Sprache=en |ISSN=0004-5411}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{Webarchiv |url=http://www.inf.fh-flensburg.de/lang/algorithmen/graph/warshall.htm |wayback=20190912193127 |text=Erklärung des Algorithmus mit Beispiel und Literaturhinweisen}}&lt;br /&gt;
* {{Internetquelle |url=http://www.pms.ifi.lmu.de/lehre/compgeometry/Gosper/shortest_path/shortest_path.html#visualization |titel=Java-Applet zur Demonstration |hrsg=Ludwig-Maximilians-Universität München |abruf=2025-01-29 |sprache=de}}&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Dynamische Programmierung]]&lt;br /&gt;
[[Kategorie:Reise- und Routenplanung]]&lt;br /&gt;
[[Kategorie:Graphsuchalgorithmus|Floyd und Warshall]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Wieggy</name></author>
	</entry>
</feed>