全局路径规划——Dijkstra算法

Dijkstra算法

1.算法特征
Dijkstra(迪克斯特拉)算法是一种经典的广度优先的状态空间搜索算法,即算法会从初始点开始一层一层地搜索整个自由空间直到到达目标点。
从一个节点遍历其余各节点,解决有权图的最短路径问题。

2.算法思路
Dijkstra算法声明一个数组dis[m]来保存源点到各个顶点的最短距离,声明一个集合S保存已经找到了最短路径的顶点,声明一个集合U存放未确定最短路径的顶点。

  1. 初始时,集合S只有起点o。起点o的路径权重被赋为0(dis[o,o]=0)。若对于起点o存在能直接到达的边(o,m),则把dis[o,m]设为V(o,m);同时把所有o不能直接到达的顶点对应路径长度设为无穷大。
  2. 寻找集合S当前顶点x与集合U中所有顶点的最短路径,对应的顶点记为y,dis[o,y]即为y到o的最短距离,更新起点o到z(z是y的所有相点)最短距离dis[o,z]=min(dis[o,z],dis[o,y]+dis[y,z])
  3. 更新集合S当前顶点x=y,集合U删去顶点y
  4. 重复2,3步,直至集合U为空

3.举例
在这里插入图片描述
起点A —— 终点D
二维数组储存两点间的权值

class solution:
	def Dijkstra(self,nums):
    #nums=['A','B','C','D','E','F','G']
	    inf=float('inf')
	    Value=[[inf,12,inf,inf,inf,16,14],[12,inf,10,inf,inf,7,inf],[inf,10,inf,3,5,6,inf],
	    [inf,inf,3,inf,4,inf,inf],[inf,inf,5,4,inf,2,8],[16,7,6,inf,2,inf,9],[14,inf,inf,inf,8,9,inf]]
	    s=[0]
	    u=[i for i in range(1,len(nums))]
	    Dis=[0]+Value[0][1:]
	    while u:
	        i=s[-1]
	        #寻找与原点最近的且未遍历的顶点np
	        minP,np=Dis[u[0]],u[0]
	        for j in u:
	            if Dis[j]<minP:
	                np=j
	                minP=Dis[j]
	        s.append(np)
	        #更新np相邻结点到原点的最短路径长度       
	        for k in range(n):
	            if k not in s and Value[np][k]!=inf:
	                Dis[k]=min(Dis[k],minP+Value[np][k])
	        u.remove(np)
	        
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值