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}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黑群晖二合一安装不了套件_玩PT还是得安装transmission,星际蜗牛安装黑群晖制作家用NAS...

原文作者:pt老萌新To小白:黑群晖docker安装PT神器transmission——星际蜗牛安装黑群晖制作家用NAS的折腾日记写在前面:里面的技术方法不是我原创的,都是网上找的,侵删。折腾的过程记录是原创的(好像没啥原创的了)&…

Know more about Cache Buffer Handle

在之前的文章《latch free:cache buffer handles造成的SQL性能问题》中我介绍了cache buffer handle latch的一些知识,在这里我们复习一下: "当会话需要pin住buffer header时它首先要获去buffer handle,得到buffer handle的过程中首先要…

spring boot web项目_阿里技术专家带你使用Spring框架快速搭建Web工程项目

点击上方 "程序员小乐"关注, 星标或置顶一起成长 第一时间与你相约 每日英文 We all have a past. It’s how you deal with it. 每个人都有过去,只是取决于你怎么去处理。 每日掏心话 人不都是这样吗,安慰别人的时候头头是道,自己…

MySQL执行外部sql脚本文件的命令

sql脚本是包含一到多个sql命令的sql语句,我们可以将这些sql脚本放在一个文本文件中(我们称之为“sql脚本文件”),然后通过相关的命令执行这个sql脚本文件。基本步骤如下:1、创建包含sql命令的sql脚本文件 文件中包含一…

全国计算机水平考试技巧,全国计算机等级考试上机考试应试技巧

掌握好上机考试的应试技巧,可以使考生的实际水平在考试时得到充分发挥,从而取得较为理想的成绩。历次考试均有考生因为忽略了这一点,加之较为紧张的考场气氛影响了水平的发挥,致使考试成绩大大低于实际水平。因此每个考生在应试前…

git 代码回滚_能提交到远程的Git回滚

很多情况下我们需要回滚代码,最容易想到的就是git reset。但是git reset有个弱点,它是一个彻底的回滚,不能再提交给远程了,因为在提交记录里回滚点之后的记录都不见了。做一下试验,一个文件我们提交了三次之后回滚#往前…

Mysql数据库的几大优势

为什么开源社区买mysql的帐, MySQL数据库的吸引开源社区的几大特质: 客户为什么会考虑购买MySQL 企业版Enterprise Edition : 转载于:https://www.cnblogs.com/macleanoracle/archive/2013/03/19/2968208.html

python机器人算法_DBscan算法及其Python实现

DBSCAN简介:1.简介DBSCAN 算法是一种基于密度的空间聚类算法。该算法利用基于密度的聚类的概念,即要求聚类空间中的一定区域内所包含对象(点或其它空间对象)的数目不小于某一给定阀值。DBSCAN 算法的显著优点是聚类速度快且能够有效处理噪声点和发现任意…

c语言e怎么表示_来测测!这11个C语言入门基础知识你都掌握了吗?

文章字数:8400 干货指数:⭐⭐⭐⭐⭐C语言程序的结构认识用一个简单的c程序例子,介绍c语言的基本构成、格式、以及良好的书写风格,使小伙伴对c语言有个初步认识。例1:计算两个整数之和的c程序:#include main…

泰拉瑞亚服务器怎么让玩家注册,泰拉瑞亚服务器权限指令大全

; z1 o, G5 B N; k# W% L5 E) a7 _9 k. x% z* A/ \# j) U! Y2 8 Wtshock.ignore.sendtilesquare7 p3 x/ : T- {; y4 y" k7 U8 J描述: 允许客户端无限制修改地图. # I( K8 {# K$ n( 4 d命令: 无 9 g3 L. p5 G9 M; Y( E4 w. Y v5 M$ H, \/ K; M% n3 ktshock.ignore.dropb…

Oracle甲骨文8.7亿美元高价收购Eloqua

北京,2012年12月20日—— 甲骨文今天宣布,已与领先的云营销自动化和收入绩效管理软件供应商Eloqua公司(NASDAQ代码:ELOQ)达成收购协议,收购价为每股23.50美元,总额约为8.71亿美元。Eloqua的现…

Linux开启mysql远程连接的设置步骤

Mysql默认root用户只能本地访问,不能远程连接管理mysql数据库,Linux如何开启mysql远程连接?设置步骤如下: 1、GRANT命令创建远程连接mysql授权用户itlogger mysql -u root -p mysql>GRANT ALL PRIVILEGES ON *.* TO itloggerlo…

3dsmax展uv_TexTools|3dmax展UV插件(TexTools for 3ds Max)下载v4.10免费版 - 欧普软件下载

TexTools for 3ds Max是为3dmax推出的一款展UV插件,主要功能包括自动加入环形边结构、材质加速烘焙、光影追踪渲染预设、多种模型对象棋盘格贴图等,支持3dsmax或以上版本,在editUVW模式下可以展开UVW修改,编辑UVW编辑器和编辑按钮…

新浪云python示例_Python Web框架Flask中使用新浪SAE云存储实例

对于部署在新浪应用引擎SAE上的项目,使用新浪SAE云存储是不错的存储方案。 新浪SAE云存储仅能在SAE环境中正常使用,对它进行简单封装后,可以直接在Flask中使用,项目代码见GitHub上Flask-SaeStorage。 使用示例代码: fr…

hp服务器如何ghost系统,惠普(HP)电脑安装不了GHOST系统的解决办法

你还在为不知道惠普(HP)电脑安装不了GHOST系统的解决办法而不知所措么?下面来是学习啦小编为大家收集的惠普(HP)电脑安装不了GHOST系统的解决办法,欢迎大家阅读:惠普(HP)电脑安装不了GHOST系统的解决办法1、按F10进入CMOS2、找到电源设置项(Power Manag…

azm335x 串口配置

任务: 配置uart3和uart5 UART3 UART5 配置uart3 1. 修改mmu33xx.c _AM33XX_MUXENTRY(MII1_RXD3, 0, "mii1_rxd3", NULL, "rgmii1_rd3", "mmc0_dat5", "mmc1_dat2", NULL, "mcasp0_axr0", "gpio2_…

木兰编程语言python_ulang(木兰编程语言)

ulang(木兰编程语言)是款最近新推出的语言编程的软件,页面非常的简单,下载下来直接编辑就可以了,永久免费的,不会有任何的弹出窗口打扰。ulang(木兰编程语言)软件特色Python是一种跨平台的计算机程序设计语言。是一种面向对象的动…

python3.7下载教程视频_视频 | 我选择Python3.7来学习!顺便把教程分享给大家

原标题:视频 | 我选择Python3.7来学习!顺便把教程分享给大家 〖文章正文〗 Python 3.7增添了众多新的类,可用于数据处理、针对脚本编译和垃圾收集的优化以及更快的异步I/O。 Python这种语言旨在使复杂任务变得简单,最新版本Python…

全志A20单独烧录内核

全志A20平板,摸索了一下fastboot,但是烧录失败,提示找不到分区。于是就想到用TF卡烧录boot.img,因为只修改了内核,不想打包全部烧录一遍。 启动到uboot命令行,输入mmcinfo初始化mmc,不过提示&am…

JVM JRE JDK,这些东西到底是什么?(转载)

JVM JRE JDK,这些东西到底是什么? JVM JRE JDK,这些东西到底是什么?   我们在安装好JDK后就可以想象成我们已经买了一台安装好软件的新的电脑。 JVM : Java Virtual Machine(Java虚拟机) 。所谓“虚拟机”顾名思义就是模拟出来的东西。就像是我们在用…