最短路径算法

  • 迪杰斯特拉算法
    • 佛洛依德算法

迪杰斯特拉算法

迪杰斯特拉算法用来解决在有向有权图中某一个点到任意一点的最短路径问题。

注意:只能用来解决权为非零的情况,不能够解决权为负数的情况

思想:我是一个搬运工

思想就不讲了,主要是代码:

def dijstra(adjacent,stc,dst,n):visited=[] #是否已经检查过dic=[Inf]*n #每一个节点的到初始节点的距离dic[stc]=0      #初始节点的距离为0current=stc   #当前的节点for _ in range(n-1):    #因为除了初始节点都需要操作visited.append(current)    #节点已经被选择#每一次选择的路径最小的节点为下一个目标,每一次都要初始化next_curret,current_value=None,Inf   for i in range(n):#迪杰斯特拉思想:当i节点的路径长度比初始节点到当前节点到current的长度+当前节点到i的路径长度大时,更换路径长度if i not in visited and dic[i] > adjacent[current][i]+dic[current]:dic[i] = adjacent[current][i]+dic[current]if dic[i] < current_value :#选出路径最小的节点为下一个currentnext_curret ,current_value= i,dic[i]current,current_dict=next_curret,current_valueprint(dic)return dic[dst]

数据:

Inf = float('inf')
Adjacent = [[0, 1, 12, Inf, Inf, Inf], [Inf, 0, 9, 3, Inf, Inf], [Inf, Inf, 0, Inf, 5, Inf], [Inf, Inf, 4, 0, 13, 15], [Inf, Inf, Inf, Inf, 0, 4], [Inf, Inf, Inf, Inf, Inf, 0]]
Src, Dst, N = 0, 5, 6

结果:

[0, 1, 8, 4, 13, 17]
17

佛洛依德算法

佛洛依德算法能够在邮有向加权图中解决随意两个节点间的最短距离

思想:
把每一个节点作为每一条路的中心节点比较,以k为中点的路径,dist[i][j]与dist[i][k]+dist[k][j]的区别

代码:(动态规划,太粗暴了)

def floyd(adjacent,n,stc,dst):for k in range(n):for i in range(n):for j in range(n):if  adjacent[i][j] > adjacent[i][k] + adjacent[k][j]:  # 两个顶点直接较小的间接路径替换较大的直接路径adjacent[i][j] = adjacent[i][k] + adjacent[k][j]for i in range(n):print(adjacent[i])return adjacent[stc][dst]
[0, 1, 8, 4, 13, 17]
[inf, 0, 7, 3, 12, 16]
[inf, inf, 0, inf, 5, 9]
[inf, inf, 4, 0, 9, 13]
[inf, inf, inf, inf, 0, 4]
[inf, inf, inf, inf, inf, 0]
16

结果呢和迪杰斯特拉算法是一样的,虽然粗暴,但是很满意呀嘿嘿,后面遇到题会回来加上的。毕竟我是菜鸟,我不是大神。我不会停止想飞的梦想。

最短路径算法 迪杰斯特拉、佛洛依德和贝尔曼相关推荐

  1. 数据结构-迪杰斯特拉,佛洛依德(两顶点之间可到达的最短距离)

    说来很惭愧,有个兄弟找我做了一道图的生成树题目我把题目给看错了,给看作求最小两点之间的可到达最短距离,本来题目意思是求任意两个村庄之间可以互通的最小资金花费,,,,我都不知道怎么看成了两点之间的最短路 ...

  2. 最短路径算法-迪杰斯特拉(Dijkstra)算法

    最短路径算法-迪杰斯特拉(Dijkstra)算法 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先遍历思 ...

  3. 最短路径算法——迪杰斯特拉(Dijkstra)

    算法思想 设G=(V,E)是一个带权有向图 把图中顶点集合V分成两组 第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径 , 就将加入到集合S中,直到全部顶点都 ...

  4. 最短路径算法-迪杰斯特拉(Dijkstra)

    迪杰斯特拉(Dijkstra) 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法.一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径 ...

  5. c++ 遍历所有点且距离最短_图解:最短路径之迪杰斯特拉算法

    小禹禹们,你们好,景禹最近已经开学,忙着准备毕业答辩的事情,这才抽身个大家更新文章,还请莫怪.生活实属不易,有时候让人有点儿焦头烂额,甚至想让景禹放弃继续更新文章,可是千百号人默默地关注者景禹,当然也 ...

  6. 图的应用——最短路径(迪杰斯特拉算法)

    Content 1. 什么是最短路径 2. 迪杰斯特拉算法[O(n^2^)] 3. 代码 4. 迪杰斯特拉算法 VS 普利姆算法 1. 什么是最短路径 在一个带权有向图中,从某一顶点到另一顶点可能有很 ...

  7. Java 图的最短路径问题-迪杰斯特拉算法VS弗洛伊德算法

    1.迪杰斯特拉算法VS弗洛伊德算法 迪杰斯特拉算法通过选定的被访问顶点,求出从出发访问顶点到其他顶点的最短路径: 弗洛伊德算法中每一个顶点都是出发访问点,所以需要将每一个顶点看做被访问顶点,求出从每一 ...

  8. 最短路径(迪杰斯特拉、弗洛伊德含代码)

    用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.对于⽆向图⽽⾔,最短路径就是从源点V0到终点Vn所包含的边最少的路径 迪杰斯特拉算法 从一个顶点到其 ...

  9. 最短路径算法---狄杰斯特拉算法

    最短路径算法-狄杰斯特拉算法 一.介绍 这是一种按照路径长度递增的次序产生最短路径的算法,采用的是贪心的思想,对带权图(有向和无向均可)寻找最短路径;该算法对于不含负权的网来说,是目前已知的最快的单源 ...

最新文章

  1. 【radar】毫米波雷达简介
  2. dom 元素拖拽实现
  3. web developer tips (39):在Visual Studio 2008中取消远程web操作
  4. 洛谷 P3376 【模板】网络最大流
  5. SQL Server 数据库优化文章
  6. git如何查看缓存区文件内容_详解Git工作区、暂存区、历史记录区以及git reset、git revert、git checkout等撤销命令的区别...
  7. 【词向量】从Word2Vec到Bert,聊聊词向量的前世今生(一)
  8. CentOS配置DHCP服务器
  9. excel筛选排序从小到大_excel筛选怎么用教程 重复数据多个条件筛选功能教学
  10. PHP中静态(static)调用非静态方法详解--调用!!!
  11. c语言程序设计ns图怎么画,请各位大神帮个忙,画个NS流程图,,急!!!
  12. USB免驱NFC读写器 Android系统中NFC读写范例
  13. 企业信息化规划与设计
  14. LaTeX模板 - FORMCM
  15. 2007福布斯名人榜完全名单 巩俐收入盖过章子怡
  16. HTML5 ——学习笔记整理
  17. 马云、张小龙、雷军缅怀金庸:江湖路远,侠义长存!
  18. 勇者斗恶龙10 android,《勇者斗恶龙》系列35周年纪念直播情报汇总
  19. linux解除硬盘加密,linux下硬盘加密
  20. MySQL数据库(九) 集群 Cluster 和性能优化

热门文章

  1. nginx 配置header
  2. win10生成UWP软件打包 安装UWP软件
  3. UR机械臂学习(8):Python实现机械臂运动控制(不使用MoveIt)
  4. EntLib.com Forum – 开源ASP.NET论坛 v3.5(提供源码下载)
  5. 一步一个脚印之笔试面试(三)-----进程,线程
  6. java thumbnails 中心点_JavaDemo——java使用Thumbnails处理图片
  7. 课程设计一之【打地鼠】
  8. python写采集程序_用python写的一个wordpress的采集程序
  9. python基础练习(3)
  10. Android手机锁代码研究---我的笔记