迪杰斯特拉

该博客内容涉及图论和算法应用,主要介绍了如何利用Dijkstra算法寻找矩阵中从起点到所有点的最短路径。在Python环境下,通过创建数据结构并迭代更新最短距离和路径,最终得到每个点到起点的最短距离及对应的路径。
摘要由CSDN通过智能技术生成

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)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值