当前位置:首页 > PHP

dijkstra算法 PHP实现

2026-02-15 23:02:51PHP

Dijkstra算法PHP实现

Dijkstra算法用于在加权图中找到单源最短路径。以下是PHP实现的关键步骤和代码示例:

初始化数据结构

需要准备三个数组:$dist存储节点到起点的最短距离,$visited标记节点是否已处理,$graph表示图的邻接矩阵。

dijkstra算法 PHP实现

$graph = [
    'A' => ['B' => 6, 'D' => 1],
    'B' => ['A' => 6, 'D' => 2, 'E' => 2],
    'D' => ['A' => 1, 'B' => 2, 'E' => 1],
    'E' => ['B' => 2, 'D' => 1]
];

核心算法实现

使用优先队列(或遍历查找)每次选择当前距离起点最近的未处理节点。

dijkstra算法 PHP实现

function dijkstra($graph, $start) {
    $dist = [];
    $visited = [];
    $queue = new SplPriorityQueue();

    foreach ($graph as $vertex => $adj) {
        $dist[$vertex] = INF;
        $visited[$vertex] = false;
    }
    $dist[$start] = 0;
    $queue->insert($start, 0);

    while (!$queue->isEmpty()) {
        $u = $queue->extract();
        $visited[$u] = true;

        foreach ($graph[$u] as $v => $weight) {
            if (!$visited[$v] && $dist[$v] > $dist[$u] + $weight) {
                $dist[$v] = $dist[$u] + $weight;
                $queue->insert($v, -$dist[$v]); // 使用负数模拟最小堆
            }
        }
    }
    return $dist;
}

结果输出

调用函数并打印最短路径结果:

$startNode = 'A';
$shortestPaths = dijkstra($graph, $startNode);

foreach ($shortestPaths as $node => $distance) {
    echo "Shortest distance from $startNode to $node is $distance\n";
}

复杂度分析

时间复杂度为O(V^2)(使用数组)或O(E + V log V)(使用优先队列),其中V是顶点数,E是边数。空间复杂度为O(V)。

注意事项

  • 确保图为非负权图
  • 未连接的节点距离保持INF
  • 实际应用时可能需要添加路径回溯功能

标签: 算法dijkstra
分享给朋友:

相关文章

react diff算法实现

react diff算法实现

React Diff 算法实现原理 React 的 Diff 算法(Reconciliation)是虚拟 DOM(Virtual DOM)更新的核心机制,通过高效比较新旧虚拟 DOM 树的差异,最小化…

js实现算法

js实现算法

JavaScript 实现常见算法的方法 排序算法 快速排序的实现: function quickSort(arr) { if (arr.length <= 1) return arr;…

js实现冒泡算法

js实现冒泡算法

冒泡排序算法实现 冒泡排序是一种简单的排序算法,通过重复遍历数组,比较相邻元素并交换顺序错误的元素,直到整个数组有序。 基本实现 function bubbleSort(arr) { l…

php 实现算法

php 实现算法

PHP 作为一门广泛应用于 Web 开发的脚本语言,同样可以高效实现各类算法。以下是几种常见算法的 PHP 实现示例,涵盖排序、搜索、递归等场景: 排序算法(快速排序) function quick…

php算法实现

php算法实现

PHP 算法实现指南 PHP 作为一种广泛使用的服务器端脚本语言,适用于多种算法实现场景。以下是常见算法在 PHP 中的实现方法。 排序算法 冒泡排序 function bubbleSort($a…

lru算法PHP实现

lru算法PHP实现

LRU算法简介 LRU(Least Recently Used)是一种缓存淘汰策略,优先淘汰最近最少使用的数据。PHP中可通过数组或结合链表实现,以下是两种常见实现方式。 基于数组的简易实现 利…