php计算最短距离,找最短路径算法(狄克斯特拉算法) php 实现

本文介绍了如何使用PHP实现狄克斯特拉算法来计算最短路径。通过一个类`ShortPath`详细展示了算法的实现过程,包括初始化图、找到最低成本节点、更新节点成本和回溯路径等步骤。作者提供了多个测试用例,包括《算法图解》书中的练习题,以及一个复杂示例。最后给出了算法应用的一个实例,并分享了《算法图解》的PDF资源链接。
摘要由CSDN通过智能技术生成

具体参考《算法图解》这本书第7章讲的,原书是用python写的,我用PHP再写一次,并稍加完善

把书上这三道练习题,拿来测试

f5ba695dd234a9b33044f3b173b70b27.png

网上再找了一个稍“难”点的题

c27cb7d5cd5c66cdf44183c4aa7d6346.png

上代码:

class ShortPath{

protected $graph=[];//只需要存每个节点所对应的邻居们,就能表示一个图了

protected $parents=[];//保存父级关系,最终能通过这个数组,回溯走过的最短路线

protected $costs;//从起点,到每个节点的花销

protected $infinity=999999;//用一个很大的数字,来代表一个正无穷大

protected $processed=[];//已处理过的节点的key

public function __construct($graph)

{

$this->graph=$graph;

//初始化父级数组, 即:只知道start的邻居,就是start的父级

foreach ($this->graph['start'] as $k=>$v) {

$this->parents[$k]='start';

}

//初始化花销数组,即:只知道start的邻居节点的花销,其它节点都是正无穷

foreach ($this->graph as $k=>$v) {

if($k=='start'){

$this->costs=$this->graph['start'];

}elseif(empty($this->costs[$k])){

$this-&g

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值