import numpy as np
def distl(matrix,starPoint):
M = 1E100
dist=[M]*len(matrix)#用于存放距离
findPonit=[]#用于存放已经找到的点
unFindPoint=[i for i in range(len(matrix))]#用于存放没有找到的点
Finallpath=[[]]*len(matrix)#用于存放路径
dist[starPoint]=0
findPonit.append(starPoint)
while(unFindPoint):
path=[starPoint]
minValue=1E100+1
for i in list(set(findPonit)) : #遍历已经查找到的节点
for j in unFindPoint:#遍历未查找到的节点
# 找出下一个节点的最小值
if minValue>dist[i]+matrix[i][j]:
minValue=dist[i]+matrix[i][j]
index=j#找到的下一个最小节点
next=i#找到跳点
if next==starPoint:
path.append(index)
else:
path=Finallpath[next].copy()#用深复制
path.append(index)
Finallpath[index]=path
findPonit.append(index)
dist[index]=minValue
print(unFindPoint,index)
unFindPoint.remove(index)#删除已经找到的节点
return dist,Finallpath
if __name__ == '__main__':
matrix=np.random.rand(100, 100) #列表,矩阵均可
dist,Finallpath=distl(matrix, 3)
print(dist)
print(Finallpath)
迪杰斯特拉
最新推荐文章于 2023-06-17 17:59:55 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)