首页 > 编程语言 >python dijkstra 最短路算法示意代码

python dijkstra 最短路算法示意代码

时间:2023-05-31 10:32:30浏览次数:33  
标签:node python 短路 lines air dijkstra print path

 

def dijkstra(graph, from_node, to_node):
    q, seen = [(0, from_node, [])], set()
    while q:
        cost, node, path = heappop(q)
        seen.add(node)
        path = path+[node]
        if node == to_node:
            return cost,path
        for adj_node, c in graph.get(node, {}).items():
            if adj_node not in seen:
                heappush(q, (cost+c, adj_node, path))
    return -1,[]

air_lines = {"1":{"2":2000, "3":2000, "4":4000, "5": 4500}, "2":{"5": 1000}, "3":{"4": 1000}, "4":{"5": 500}}

print(dijkstra(air_lines, "1", "4"))
print(dijkstra(air_lines, "1", "5"))
print(dijkstra(air_lines, "4", "5"))
print(dijkstra(air_lines, "5", "4"))
print(dijkstra(air_lines, "1", "1"))
print(dijkstra(air_lines, "10", "10"))

"""
(3000, ['1', '3', '4'])
(3000, ['1', '2', '5'])
(500, ['4', '5'])
(-1, [])
(0, ['1'])
(0, ['10'])
"""

  

标签:node,python,短路,lines,air,dijkstra,print,path
From: https://blog.51cto.com/u_11908275/6384771

相关文章

  • ​Python 3 新特性:类型注解——类似注释吧,反正解释器又不做校验
    Python3新特性:类型注解Crossin上海交通大学计算机应用技术硕士95人赞同了该文章前几天有同学问到,这个写法是什么意思:defadd(x:int,y:int)->int:returnx+y我们知道Python是一种动态语言,变量以及函数的参数是不区分类型。因此我们定义函数只需要这样写就可以了:def......
  • python deque的内在实现 本质上就是双向链表所以用于stack、队列非常方便
    Howcollections.dequeworks?Cosven  前言:在Python生态中,我们经常使用collections.deque来实现栈、队列这些只需要进行头尾操作的数据结构,它的append/pop操作都是O(1)时间复杂度。list的pop(0)的时间复杂度是O(n),在这个场景中,它的效率没有deque高。那deque内部......
  • python 校验 ipv4 ipv6 格式是否正确,是否属于某网段
    使用python自带的ipaddress模块一、ipv4importipaddress#判断ipv4地址格式是否正确如:ip="192.168.1.101"ip=ipaddress.IPv4Address(ipv4)#判断subnet地址格式是否正确如:subnet="192.168.1.0/24"network=ipaddress.IPv4Network(subnet)#判断ipv4......
  • python 切片
    Python列表切片Python中符合序列的有序序列都支持切片(slice),例如列表,字符串,元组。切片操作基本表达式:object[start_index:end_index:step]切片表达式包含两个":",用于分隔三个参数(start_index、end_index、step),当只有一个":"时,默认第三个参数step=1。start_index:表示起始索......
  • Python 实现进度条
    Python实现进度条1、案例一代码importsysimporttimedefprogress_bar():foriinrange(1,101):print("\r",end="")print("Downloadprogress:{}%:".format(i),"▋"*(i//2),end="")......
  • 【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例
    全文链接:http://tecdat.cn/?p=32604原文出处:拓端数据部落公众号分析师:BaileyZheng和Lijie Zhang即使是同一种植物,由于生长的地理环境的不同,它们的特征会有所差异。例如鸢尾花,可分为山鸢尾、杂色鸢尾、维吉尼亚鸢尾。假设此时您得到了一朵鸢尾花,如何判断它属于哪一类呢?支......
  • Python信贷风控模型:Adaboost,XGBoost,SGD, SVC,随机森林, KNN预测信贷违约支付|附代码
    全文链接:http://tecdat.cn/?p=26184最近我们被客户要求撰写关于信贷风控模型的研究报告,包括一些图形和统计输出。在此数据集中,我们必须预测信贷的违约支付,并找出哪些变量是违约支付的最强预测因子?以及不同人口统计学变量的类别,拖欠还款的概率如何变化?有25个变量:ID: 每个客户......
  • 【视频】风险价值VaR原理与Python蒙特卡罗Monte Carlo模拟计算投资组合实例|附代码数
    原文链接:http://tecdat.cn/?p=22862 最近我们被客户要求撰写关于风险价值的研究报告,包括一些图形和统计输出。风险价值(VaR)是一种统计数据,用于量化公司、投资组合在特定时间范围内可能发生的财务损失程度什么是风险价值(VaR)?该指标最常被投资银行和商业银行用来确定其机构......
  • python二维数组切片
    随堂测试这道题错了,于是怒而发blog,是分割维度的标识符,如果对象是二维数组,则切片应当是x[,]的形式,逗号之前和之后分别表示对象的第0个维度和第1个维度;如果对象是三维数组,则切片应当是x[,,],里面有两个逗号,分割出三个间隔,三个间隔的前、中和后分别表示对象的第0、1、2个维度。每个......
  • python内置库--json
    关于jsonJSON是一种按照JavaScript对象语法的数据格式相关介绍https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/JSON很多网页和app前后端数据交换的数据的格式就是json,打开F12或者抓包工具就可以看到py的json模块常用函数相关函数介绍json.dumps()......