吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1896|回复: 6
收起左侧

[Python 转载] 【Dijkstra】算法

[复制链接]
Lthero 发表于 2021-5-31 18:34
迪克斯特拉算法

非教学帖子,只作自我记录


详解
https://www.codespeedy.com/how-to-implement-dijkstras-shortest-path-algorithm-in-python/
wiki
https://en.m.wikipedia.org/wiki/Dijkstra%27s_algorithm
[Python] 纯文本查看 复制代码
graph = {
    'A': {'B': 1, 'C': 4, 'D': 2},
    'B': {'A': 9, 'E': 5},
    'C': {'A': 4, 'F': 15},
    'D': {'A': 10, 'F': 7},
    'E': {'B': 3, 'J': 7},
    'F': {'C': 11, 'D': 14, 'K': 3, 'G': 9},
    'G': {'F': 12, 'I': 4},
    'H': {'J': 13},
    'I': {'G': 6, 'J': 7},
    'J': {'H': 2, 'I': 4},
    'K': {'F': 6}
}
source = input('输入起点 ')
# 记录来路  起点来路设置为起点
came_from = {source:source}
# 记录已经遍历的结点
passed_points = [source]
# 记录起点到其它结点的最小值
queue = {}
for i in graph:
    queue[i] = float('inf')
    came_from[i] = None
# 起点设置为0
queue[source] = 0
# 排序
queue = sorted(queue.items(), key=lambda x: x[1])
while queue:
    # pop出边权重最小的结点
    min_point = queue.pop(0)
    # 格式转换,下面取出数据
    queue = dict(queue)
    # 遍历这个结点的邻接表
    for i in graph[min_point[0]]:
        # 如果i还没遍历
        if i not in passed_points:
            # 计算如果走这个结点的花费
            comp = min_point[1] + graph[min_point[0]][i]
            # 如果这个花费更小(比原来的路)
            if queue[i] > comp:
                # 更新花费
                queue[i] = comp
                # 更新来路
                came_from[i] = (min_point[0], comp)
                # 当前结点放到已经遍历的中
                passed_points.append(i)
    # 重新排序
    queue = sorted(queue.items(), key=lambda x: x[1])
# print(came_from)
dest = input('输入终点 ')
final_path = []
p = dest
print('总共花费 ', came_from[p][1], ' 单位')

# 输出结果
while came_from[p] != source:
    final_path.append(came_from[p][0])
    p = came_from[p][0]
for i in final_path[::-1]:
    print(i, end=' ')

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

小小宇6 发表于 2021-5-31 19:11
还是Floyd简单些
ljb牛 发表于 2021-5-31 20:25
nanaqilin 发表于 2021-5-31 21:29
好像听说过这个算法,但是太久了不知道做啥用的了
lotus136 发表于 2021-5-31 21:39
小白有点看不懂。
machinemaker 发表于 2021-5-31 22:19
数据结构 oh 头疼
月清晖 发表于 2021-6-1 08:26
哈哈9年前数学建模用过这个算法,特么9年了。。。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 15:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表