python闭环最短路径_最短路径算法的实现(dijskstra):Python
dijskstra最短路径算法步骤:
输入:图G=(V(G),E(G))有一个源顶点S和一个汇顶点t,以及对所有的边ij属于E(G)的非负边长出cij。
输出:G从s到t的最短路径的长度。
第0步:从对每个顶点做临时标记L开始,做法如下:L(s)=0,且对除s外所有的顶点L(i)=∞。
第1步:找带有最小临时标记的顶点(如果有结,随机地取一个),使得该标记变成永久标记,意该标记永久不再改变。
第2步:对没有永久标记但是又与带永久标记的顶点相邻的顶点j,按如下方法计算一个新的临时标记:L(j)=min(L(i)+cij),求最小是对所有带永久标记的顶点i做的,重复1和2,知道所有的顶点都打上永久标记。
时间复杂度:O(n^2)
python代码如下
1 __author__='wym'
2 #coding=cp936
3 classAlgorithm():4 point_list=[]5 edge_list=[]6 defdijkstra(self,start_point,point_list,edge_list):7 '''
8 @point为起始点9 @point_list为顶点列表10 @edge_list为边列表11 '''
12 #列表点
13 temp_point=[]14 #起始点,在列表点中的位置
15 point_index=point_list.index(start_point)16 #初始点到其余各点的距离字典
17 dis_dic=dict()18 #边列表的首端点列表
19 temp_edge=[]20 #距离初始化
21 dis_list=['inf']*len(point_list)22 temp_point.append(start_point)23 dis_list[point_index]=024 for i inrange(len(point_list)):25 dis_dic.setdefault(point_list[i],dis_list[i])26 for i inrange(len(edge_list)):27 temp_edge.append(edge_list[i][0])28 point=start_point29 #依次遍历加入最小距离的点,并更新原列表中点的距离
30 while len(temp_point)
33 if len(index)>0:34 value=edge_list[index[0]][2]35 add_index=index[0]36 for i inindex:37 if edge_list[i][0] indis_dic:38 dis_dic[edge_list[i][1]]=min(float(edge_list[i][2])+float(dis_dic[point]),float(dis_dic[edge_list[i][1]]))39 if value>edge_list[i][2]:40 value=edge_list[i][2]41 add_index=i42 temp_point.append(edge_list[add_index][1])43 point=edge_list[add_index][1]44 else:45 point=in_list[in_list.index(point)-1]46 printdis_dic47 returndis_dic48 deffind_index(self,point,temp_edge,edge_list,temp_point):49 '''
50 @point:遍历点基准点51 @temp_edge:边列表的首端点列表52 @edge_list:边权列表53 @temp_point:列表点54 @返回边权列表列表索引55 '''
56 #寻找点的索引,并去除已在列表中的点
57 index=[]58 for i inrange(len(temp_edge)):59 if point==temp_edge[i] and edge_list[i][1] not intemp_point:60 index.append(i)61 returnindex62
63 if __name__=="__main__":64 print '请输入无向图的顶点'
65 point_list=input()66 print '请输入无向图的边'
67 edge_list=list(input())68 print '请输入各边长度'
69 for i inrange(len(edge_list)):70 print '顶点'+str(edge_list[i][0])+'顶点'+str(edge_list[i][1])+'的长度为:'
71 length=[input("长度为:")]72 edge_list[i]+=length73 edge_list.append([edge_list[i][1],edge_list[i][0],length[0]])74 whileTrue:75 print '请输入起始点'
76 start_point=input("start_point=")77 if start_point inpoint_list:78 obj=Algorithm()79 obj.dijkstra(start_point,point_list,edge_list)80 break
81 else:82 print '该点不在图中,请重新输入:'
83 continue
运行结果:
请输入无向图的顶点
1,2,3,4,5,6
请输入无向图的边
[1,6],[1,3],[1,2],[2,3],[3,6],[2,4],[3,4],[4,5],[5,6]
请输入各边长度
顶点1顶点6的长度为:
长度为:14
顶点1顶点3的长度为:
长度为:9
顶点1顶点2的长度为:
长度为:7
顶点2顶点3的长度为:
长度为:10
顶点3顶点6的长度为:
长度为:2
顶点2顶点4的长度为:
长度为:15
顶点3顶点4的长度为:
长度为:11
顶点4顶点5的长度为:
长度为:6
顶点5顶点6的长度为:
长度为:9
请输入起始点
start_point=1
{1: 0, 2: 7.0, 3: 9.0, 4: 20.0, 5: 20.0, 6: 11.0}
python闭环最短路径_最短路径算法的实现(dijskstra):Python相关推荐
- python数据结构算法_数据结构与算法(Python)
数据结构与算法(Python) Why? 我们举一个可能不太恰当的例子: 如果将最终写好运行的程序比作战场,我们码农便是指挥作战的将军,而我们所写的代码便是士兵和武器. 那么数据结构和算法是什么?答曰 ...
- 怎么用python自制计算公式_手把手教你用python制作简易计算器,能够记录你使用的情况...
话不多说,首先先看效果图,它能够记录你在使用过程中的历史,方便你查看是否有错: 接下来就仔细分析一下是如何制作的: 简易计算器 第一步:导入资源库 在过程中使用到了tkinter这个资源库,win+R ...
- python做运动控制_第一课:用Python操控小龟小车运动
欢迎来到小龟的课堂,今天我们讲如何用小龟小车的车载Python控制小车运动. 如果小伙伴还不会使用小龟小车的Python编辑器的话,可以阅读这篇教程<如何使用小龟小车的Python编辑器> ...
- print python excel分隔_合并/拆分 Excel?Python、VBA轻松自动化
作者 | Ryoko 来源 | 凹凸数据 当你收集了 n 个人的 EXCEL 记录表,需要将它们汇成一个总表时你会怎么做呢? 如果不通过技术手段,要一个个打开再复制粘贴也太麻烦了吧! 此时就需要一个通 ...
- python医学应用_数据分析工具鄙视链:Python、R语言是老大,Excel只能称小弟?
最新行业报告 2020数据分析.商业分析行业报告工作岗位与职能.薪资对比.热招公司等多方面详细解读帮助你一网打尽,斩获心仪Offer! 扫码回复[数据分析 0]立即领取 History语言发展史ABC ...
- python半圆代码_趣味项目:用Python代码做个月饼送给你!
所用工具 1.Python中的turtle包 2.对Python似火的热情 先来介绍一番 Turtle作图又叫海龟作图,是Python中比较有趣的一个模块,功能强大,使用方便.简单来说,比如有一块空地 ...
- 易语言和python混合编程_关于易语言与Python的一点想法
易语言与python的一点想法">关于易语言与Python的一点想法 小香蕉 2019年7月11日 说在前面 最近吃饭的时候总是会想很多关于易语言的事情.易语言是我学会的第一门语言,虽 ...
- python文件编译_我算是白学Python了,现在才知道原来Python是可以编译的
斌哥说 大家好,我是斌哥. 一说起Python,可能开发者第一时间想到的就是:"Python是一门能快速开发的解释型语言". 没错,Python确实是一门解释型的语言,而对比Jav ...
- python计算学习_跟老齐学Python之用Python计算
一提到计算机,当然现在更多人把她叫做电脑,这两个词都是指computer.不管什么,只要提到她,普遍都会想到她能够比较快地做加减乘除,甚至乘方开方等.乃至于,有的人在口语中区分不开计算机和计算器. 那 ...
- python深度爬虫_总结:常用的 Python 爬虫技巧
用python也差不多一年多了,python应用最多的场景还是web快速开发.爬虫.自动化运维:写过简单网站.写过自动发帖脚本.写过收发邮件脚本.写过简单验证码识别脚本. 爬虫在开发过程中也有很多复用 ...
最新文章
- Android4.0 Design之设计规范的十大革新
- TCP客户机-服务器
- idea getset的快捷键
- 从表到里学习JVM实现
- 【JAVA资料免费下载】158个JAVA免豆精品资料汇总——下载目录(转载)
- Qt 中使用QPainter时,实现坐标变化的方法
- 最简单的制作从USB启动的系统的方法
- bzoj2561: 最小生成树
- 男朋友出的性格测试题
- JAVA单向链表实现
- linux yum c 11,CentOS YUM源安装 GVM-11 (一)
- php微信实现红包雨,怎么制作微信红包雨(微信红包雨特效)
- Photoshop 颜色理论(转)
- python求根公式_python与代数
- 用VHDL编写testbench激励文件
- 用python计算圆周率_用python计算圆周率PI
- Imagination出席AIIA交流活动 PowerVR NNA IP入选首批《AI芯片技术选型目录》
- python ccf题解 201412-3 集合竞价
- 学编程,自学还是选择培训机构?
- Django REST 框架的 FBV 与 CBV 选择
热门文章
- 【MySQL原理解析】01. 一条SQL查询语句是如何执行的
- 【OS学习笔记】十三 保护模式一:全局描述符表(GDT)
- cursor.execute(sql) 执行结果集是有记录的 但是num=cursor.rownumber 返回值为0
- Python数据类型与运算符号
- Number Sequence (KMP的应用)
- Mysql储存过程2:变量定义与参数传递
- erlang OTP中的四大behaviour fsm的例子
- [LeetCode-JAVA] Remove Linked List Elements
- [翻译] ZLHistogramAudioPlot
- 847. Shortest Path Visiting All Nodes(一)