python实现迪杰斯特拉(Dijkstra)算法

本文通过使用Python中的pandas和numpy库来实现Dijkstra最短路径算法。具体地,该算法在一个带权重的图中找到从起点到所有其他点的最短路径,并详细展示了如何更新节点的距离和前驱节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

示例如下:
在这里插入图片描述

import pandas as pd
import numpy as np

data = [(0, 1, 12, np.inf, np.inf, np.inf),
        (np.inf, 0, 9, 3, np.inf, np.inf),
        (np.inf, np.inf, 0, np.inf, 5, np.inf),
        (np.inf, np.inf, 4, 0, 13, 15),
        (np.inf, np.inf, np.inf, np.inf, 0, 4),
        (np.inf, np.inf, np.inf, np.inf, np.inf, 0)]
disance = pd.DataFrame(data, index=[i for i in range(1, len(data) + 1)], columns=[i for i in range(1, len(data) + 1)])
print("邻接矩阵为:")
print(disance)
biao = [(0, " ", 1),
        (np.inf, None, 0),
        (np.inf, None, 0),
        (np.inf, None, 0),
        (np.inf, None, 0),
        (np.inf, None, 0)]
biao = pd.DataFrame(biao, index=[i for i in range(1, len(data) + 1)], columns=['dis', 'behind', 'signal'])
a = np.inf
better = [1]
long = [0, np.inf, np.inf, np.inf, np.inf, np.inf]
for j in better:
    start = disance.iloc[j - 1, :]
    for i in range(1, len(data) + 1):
        if (start[i] != np.inf) and (start[i] != 0):
            if long[j - 1] + disance.iloc[j - 1, i - 1] < biao.iloc[i - 1, 0]:
                biao.iloc[i - 1, 0] = long[j - 1] + disance.iloc[j - 1, i - 1]
                biao.iloc[i - 1, 1] = j
    for z in range(1, len(long) + 1):
        long[z - 1] = biao.iloc[z - 1, 0]
    m = 1
    for k in range(1, len(biao) + 1):
        if (biao.iloc[k - 1, 0] < a) and (biao.iloc[k - 1, 2] != 1):
            a, m = biao.iloc[k - 1, 0], k
    biao.iloc[m - 1, 2] = 1
    if m != 1:
        better.append(m)
    a = np.inf
print("-" * 20)
print(biao)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抽象带篮子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值