当前位置:首页 > 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 树的差异,最小化…

dijkstra php实现

dijkstra php实现

Dijkstra算法的PHP实现 Dijkstra算法是一种用于在加权图中查找单源最短路径的经典算法。以下是一个完整的PHP实现示例,包含图的表示和算法执行过程。 图的表示 使用邻接数组来表示图结…

php 实现算法

php 实现算法

PHP 实现常见算法的方法 PHP 作为一门服务器端脚本语言,可以实现多种算法。以下是一些常见算法的 PHP 实现示例。 排序算法 冒泡排序 function bubbleSort($arra…

php实现欧几里得算法实现

php实现欧几里得算法实现

欧几里得算法简介 欧几里得算法(辗转相除法)用于计算两个非负整数的最大公约数(GCD)。其核心思想是通过反复用较小数除较大数取余,直到余数为0,此时的除数即为最大公约数。 PHP实现方法 以下是用P…

php 实现共识算法

php 实现共识算法

PHP 实现共识算法的基础方法 共识算法是分布式系统中确保数据一致性的核心机制,PHP 可通过特定设计实现简化版本的共识逻辑。以下是常见实现方式: 基于Paxos的简化实现 Paxos 算法的 PH…

js实现基数算法

js实现基数算法

基数排序(Radix Sort)简介 基数排序是一种非比较型整数排序算法,通过逐位分配和收集实现排序。适用于整数或固定格式字符串,时间复杂度为O(nk),其中n是元素数量,k是数字位数。 实现基数…