So implementieren Sie den Algorithmus für den kürzesten Pfad mit PHP
Zusammenfassung: Der Algorithmus für den kürzesten Pfad ist eines der wichtigen Themen in der Graphentheorie, und PHP als allgemeine Skriptsprache kann auch zur Implementierung des Algorithmus für den kürzesten Pfad verwendet werden. In diesem Artikel wird anhand von Codebeispielen erläutert, wie Sie mithilfe der PHP-Sprache den Kürzeste-Pfad-Algorithmus implementieren.
1. Übersicht über den Kürzeste-Pfad-Algorithmus
Der Kürzeste-Pfad-Algorithmus ist ein Algorithmus, der verwendet wird, um den kürzesten Pfad zwischen zwei Knoten im Diagramm zu finden. Zu den gängigen Algorithmen für kürzeste Wege gehören der Dijkstra-Algorithmus und der Floyd-Algorithmus.
2. Verwenden Sie PHP, um den kürzesten Pfadalgorithmus zu implementieren. Im Folgenden konzentrieren wir uns darauf, wie Sie die PHP-Sprache verwenden, um den Dijkstra-Algorithmus zur Lösung des kürzesten Pfades zu implementieren.
class Node { public $name; public $neighbors; function __construct($name) { $this->name = $name; $this->neighbors = array(); } function addNeighbor($name, $distance) { $this->neighbors[$name] = $distance; } } class Graph { public $nodes; function __construct() { $this->nodes = array(); } function addNode($name) { $node = new Node($name); $this->nodes[$name] = $node; } function addEdge($from, $to, $distance) { $this->nodes[$from]->addNeighbor($to, $distance); $this->nodes[$to]->addNeighbor($from, $distance); } }
function dijkstra($graph, $start, $end) { $distances = array(); $previous = array(); $visited = array(); foreach ($graph->nodes as $name => $node) { $distances[$name] = PHP_INT_MAX; $previous[$name] = null; $visited[$name] = false; } $distances[$start] = 0; while (true) { $minNode = null; $minDistance = PHP_INT_MAX; foreach ($graph->nodes as $name => $node) { if ($visited[$name] === false && $distances[$name] < $minDistance) { $minNode = $name; $minDistance = $distances[$name]; } } if ($minNode === null || $minNode === $end) { break; } foreach ($graph->nodes[$minNode]->neighbors as $neighbor => $distance) { $newDistance = $distances[$minNode] + $distance; if ($newDistance < $distances[$neighbor]) { $distances[$neighbor] = $newDistance; $previous[$neighbor] = $minNode; } } $visited[$minNode] = true; } // 重构最短路径 $path = array(); $current = $end; while ($current !== null) { array_unshift($path, $current); $current = $previous[$current]; } return $path; }
Das Folgende ist ein einfaches Beispiel, um zu demonstrieren, wie die obige Funktion zur Berechnung des kürzesten Pfades verwendet wird.
$graph = new Graph(); $graph->addNode('A'); $graph->addNode('B'); $graph->addNode('C'); $graph->addNode('D'); $graph->addNode('E'); $graph->addEdge('A', 'B', 5); $graph->addEdge('A', 'C', 3); $graph->addEdge('B', 'D', 2); $graph->addEdge('C', 'D', 6); $graph->addEdge('C', 'E', 4); $graph->addEdge('D', 'E', 1); $path = dijkstra($graph, 'A', 'E'); echo implode(' -> ', $path); // 输出:A -> B -> D -> E
Das obige ist der detaillierte Inhalt vonSo implementieren Sie den Kürzeste-Pfad-Algorithmus mit PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!