位置: 编程技术 - 正文

PHP实现的迪科斯彻(Dijkstra)最短路径算法实例(phpdie)

编辑:rootadmin

推荐整理分享PHP实现的迪科斯彻(Dijkstra)最短路径算法实例(phpdie),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:phpdesk,php dio,php des,php dicom,php _dir_,php di,php di,php dio,内容如对您有帮助,希望把文章链接给更多的朋友!

本文实例讲述了PHP实现的迪科斯彻(Dijkstra)最短路径算法。分享给大家供大家参考,具体如下:

一、待解决问题

单源最短路径问题,在给定有向图中求一个顶点(单源顶点)到其他所有顶点的最短路径问题。在下图中,每条边上有一个权值,希望求解A到所有其他顶点(B/C/D/E/F/G)的最短路径。

二、问题分析(最短路径的子结构同样最优性)

如果P(A,G)是从顶点A到G的最短路径,假设D和F是这条路径上的中间点,那么P(D,F)一定时从D到F的最短路径。如果P(D,F)不是D到F的最短路径,那必然存在某一个节点M的另一条D到F的路径可以使P(A,B...M...F,G)比P(A,G)小,自相矛盾。

有了这样的性质,我们可以了解Dijkstra算法。

三、Dijkstra算法

Dijkstra 算法,又叫迪科斯彻算法(Dijkstra),又称为单源最短路径算法,所谓单源是在一个有向图中,从一个顶点出发,求该顶点至所有可到达顶点的最短路径问题。 问题描述为设G=(V,E)是一个有向图,V表示顶点,E表示边。它的每一条边(i,j)属于E,都有一个非负权W(I,j),在G中指定一个结点v0,要求把从v0到G的每一个接vj(vj属于V)的最短有向路径找出来(或者指出不存在)。 Dijstra算法是运用贪心的策略,从源点开始,不断地通过相联通的点找出到其他点的最短距离。

Dijkstra的贪心应用在他利用(二)中的性质,不断地选取“最近”的节点并试探每个节点的所有可能存在链接,以起始点为中心向外层层扩展,直到扩展到终点为止。对于源点A,逐步扩展,根据dist[j]=min{dist[j],dist[i]+matrix[i][j]}更新与i直接相邻的顶点信息。

算法描述

PHP实现的迪科斯彻(Dijkstra)最短路径算法实例(phpdie)

1)算法思想:

设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径 , 就将加入到集合S中,直到全部顶点都加入到S中,算法就结束了),第二组为其余未确定最短路径的顶点集合(用U表示),按最短路径长度的递增次序依次把第二组的顶点加入S中。在加入的过程中,总保持从源点v到S中各顶点的最短路径长度不大于从源点v到U中任何顶点的最短路径长度。此外,每个顶点对应一个距离,S中的顶点的距离就是从v到此顶点的最短路径长度,U中的顶点的距离,是从v到此顶点只包括S中的顶点为中间顶点的当前最短路径长度。

2)算法步骤:

a.初始时,S只包含源点,即S={v},v的距离为0。U包含除v外的其他顶点,即:U={其余顶点},若v与U中顶点u有边,则<u,v>正常有权值,若u不是v的出边邻接点,则<u,v>权值为∞。

b.从U中选取一个距离v最小的顶点k,把k,加入S中(该选定的距离就是v到k的最短路径长度)。

c.以k为新考虑的中间点,修改U中与k相邻的各顶点的距离;若从源点v到顶点u的距离(经过顶点k)比原来距离(不经过顶点k)短,则修改顶点u的距离值,修改后的距离值为顶点k的距离加上k与u边上的权。

d.重复步骤b和c直到所有顶点都包含在S中。

四、算法PHP实现

调用类:

执行结果:

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数据结构与算法教程》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》及《php查找技巧与方法总结》

希望本文所述对大家PHP程序设计有所帮助。

PHP实现广度优先搜索算法(BFS,Broad First Search)详解 本文实例讲述了PHP实现广度优先搜索算法。分享给大家供大家参考,具体如下:广度优先搜索的算法思想Breadth-FirstTraversal广度优先遍历是连通图的一种

PHP实现深度优先搜索算法(DFS,Depth First Search)详解 本文实例讲述了PHP实现深度优先搜索算法。分享给大家供大家参考,具体如下:深度优先搜索的实现原理:实现代码:phpclassSearch_Method{//无向图的数组

PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解) 1.首先做主页面Ajax_pag.php代码如下:!DOCTYPEhtmlhtmlheadmetacharset="UTF-8"titleAjax做分页/titlescriptsrc="bootstrap/js/jquery-1..2.min.js"/scriptscriptsrc="Ajax_pag.js"/scriptscriptsr

标签: phpdie

本文链接地址:https://www.jiuchutong.com/biancheng/282901.html 转载请保留说明!

上一篇:PHP环形链表实现方法示例(环形链表入口节点)

下一篇:PHP实现广度优先搜索算法(BFS,Broad First Search)详解(广度优先算法代码)

  • 普通发票忘记开数量和单价可以用吗
  • 个人所得税申报密码如何设置
  • 私人车辆油费可以报销吗
  • 母公司为子公司担保需要股东会决议吗
  • 活动板房怎么开发票
  • 固定资产特性
  • 土地使用权的账面价值计入在建工程
  • 公益性捐赠支出属于营业外支出吗
  • 商场做促销
  • 冲销暂估入库
  • 收到发票错误主管有责任吗
  • 销售原材料收到商业承兑汇票会计分录
  • 拨款和支出的区别
  • 跨年冲销营业外支出
  • 税控盘这个月没有反写会怎么样
  • 对方增值税发票丢失怎么办
  • 建筑业营改增账务处理怎么做?
  • 研发废料收入实务中如何冲减研发费用?
  • 小微企业核定征收所得税税率
  • 上月计提租赁费下月扣怎么做账
  • 打车进项可以抵扣吗
  • 未抵扣完的进项税额可以跨年抵扣吗
  • 劳务派遣 税务
  • 收到银行本票的会计分录怎么写
  • VM虚拟机怎么安装网心容器
  • 没有系统U盘,电脑密码忘记了如何打开电脑
  • 农产品抵扣进项税额转出
  • 在windows7提供了一种什么技术
  • 进口的固定资产包括哪些
  • mmc.exe是什么进程
  • wordpress测试
  • 为什么无线网密码对了就是连不上网
  • 两台电脑文件共享,显示没有访问权限
  • php提示框
  • php 正则表达式
  • 核定征收开票超过限额
  • 小微企业怎么给员工交保险
  • 新成立公司建账
  • vue3 原理
  • dhclient卡住
  • php7 数组
  • PHP 实现等比压缩图片尺寸和大小实例代码
  • 所得税季度申报弥补以前年度亏损
  • 在岗职工平均工资和社平工资的区别
  • 增值税纳税申报表怎么填
  • 开票一定要确认发票吗
  • 用python创建一个列表
  • 委托加工应税消费品
  • 建筑业预缴增值税计算公式
  • 长期待摊费用是非流动资产吗
  • 两者有什么区别用英语怎么说
  • 高新技术企业认定中介机构
  • 免税企业税金及附加计算
  • 印花税计入什么会计分录
  • 预收账款冲销账户怎么做
  • 房屋建筑物固定资产标牌图片
  • 失业保险金的支付方式
  • 库存商品账务没做如何调增
  • 重新计量设定受益计划变动额计入
  • sqlserver获取uuid
  • sqlserver1053怎么解决
  • mac 设置
  • linux如何关闭selinux
  • centos5.3安装教程
  • macbookpro4399小游戏
  • printnow.exe - printnow是什么进程 有什么作用
  • win7系统ie浏览器打不开
  • vnc登录linux
  • Win10系统里的Smartscreen筛选器的使用以及开启方法
  • win7系统连不了网络
  • win7开机系统恢复
  • 【ExpandableListView】ExpandableListView互斥展开效果
  • androidstudio git
  • js遍历json对象键值
  • 四川省 税务局
  • 全国大学生数学竞赛证书电子版查询
  • 电子税务局怎么添加银行账户信息
  • 四川办税大厅
  • 我国就业制度的演变
  • 我国税务师事务所有哪些
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设