Heim > Artikel > Backend-Entwicklung > So implementieren Sie die Suche nach kürzesten Pfaden mithilfe des Floyd-Warshall-Algorithmus in PHP
Im Bereich der Informatik ist der Floyd-Warshall-Algorithmus (kurz FW-Algorithmus) ein dynamischer Programmieralgorithmus, der das Kürzeste-Wege-Problem für alle Knotenpaare löst. Es kann gerichtete oder ungerichtete Graphen lösen, bei denen die Gewichte aller Kanten positiv oder negativ sind, und weist sowohl zeitliche als auch räumliche Komplexitätsoptimierungsprobleme auf.
In PHP gibt es viele Möglichkeiten, den FW-Algorithmus zu implementieren. Eine davon besteht darin, ein zweidimensionales Array zur Darstellung der Adjazenzmatrix des Herzens zu verwenden. Im Folgenden sind die spezifischen Schritte aufgeführt:
Die Adjazenzmatrix ist ein zweidimensionales Array, in dem jedes Element den Abstand zwischen zwei Scheitelpunkten darstellt. Wenn zwischen zwei Eckpunkten keine Verbindung besteht, ist der Wert unendlich. In PHP kann die Adjazenzmatrix auf folgende Weise initialisiert werden:
// Initialize an empty adjacency matrix $adjMatrix = []; // Fill the adjacency matrix with infinite values for($i=0; $i<$n; $i++) { for($j=0; $j<$n; $j++) { $adjMatrix[$i][$j] = INF; } } // Assign values to the adjacency matrix for($i=0; $i<count($edges); $i++) { $source = $edges[$i][0]; $dest = $edges[$i][1]; $weight = $edges[$i][2]; $adjMatrix[$source][$dest] = $weight; }
wobei $n die Anzahl der Knoten im gesamten Diagramm darstellt und $edges die Anzahl der Kanten darstellt, einschließlich Startpunkt, Endpunkt und Gewicht jeder Kante.
Das DP-Array ist ebenfalls ein zweidimensionales Array, wobei jedes Element die Länge des kürzesten Pfades vom Startpunkt zum Punkt darstellt. Verwenden Sie die Adjazenzmatrix zur Initialisierung:
$dp = $adjMatrix;
for($k=0; $k<$n; $k++) { for($i=0; $i<$n; $i++) { for($j=0; $j<$n; $j++) { if ($dp[$i][$j] > $dp[$i][$k] + $dp[$k][$j]) { $dp[$i][$j] = $dp[$i][$k] + $dp[$k][$j]; } } } }
wobei $k, $i, $j$ jeweils die Zeilen- und Spaltenindizes in der Knotenmatrix darstellen.
for($i=0; $i<$n; $i++) { for($j=0; $j<$n; $j++) { if($dp[$i][$j] == INF) { echo "INF "; } else { echo $dp[$i][$j]." "; } } echo " "; }
Das Obige ist der Prozess der Verwendung des FW-Algorithmus, um den kürzesten Pfad in PHP zu finden. Es ist zu beachten, dass in praktischen Anwendungen die Algorithmusoptimierung und Leistungsoptimierung je nach Situation durchgeführt werden muss, um den tatsächlichen Anforderungen gerecht zu werden.
Das obige ist der detaillierte Inhalt vonSo implementieren Sie die Suche nach kürzesten Pfaden mithilfe des Floyd-Warshall-Algorithmus in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!