我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【Python排序搜索基本算法】之Dij

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【Python排序搜索基本算法】之Dij

        Dijkstra算法和前一篇的Prim算法非常像,区别就在于Dijkstra算法向最短路径树(SPT)中添加顶点的时候,是按照ta与源点的距离顺序进行的。OSPF动态路由协议就是用的Dijkstra算法。下面还以那个图的例子为例:


代码如下:

_=float('inf')

def dijkstra(graph,n):
	dis=[0]*n
	flag=[False]*n
	pre=[0]*n
	flag[0]=True
	k=0
	for i in range(n):
		dis[i]=graph[k][i]

	for j in range(n-1):
		mini=_
		for i in range(n):
			if dis[i]<mini and not flag[i]:
				mini=dis[i]
				k=i
		if k==0:#不连通
			return
		flag[k]=True
		for i in range(n):
			if dis[i]>dis[k]+graph[k][i]:
				dis[i]=dis[k]+graph[k][i]
				pre[i]=k
#		print(k)
	return dis,pre

if __name__=='__main__':
	n=6
	graph=[
			[0,6,3,_,_,_],
			[6,0,2,5,_,_],
			[3,2,0,3,4,_],
			[_,5,3,0,2,3],
			[_,_,4,2,0,5],
			[_,_,_,3,5,0],
			]
	dis,pre=dijkstra(graph,n)
	print(dis)
	print(pre)

        输出如下:

[0, 5, 3, 6, 7, 9]
[0, 2, 0, 2, 2, 3]

        按照输出结果用粗线表示最短路径树如下:



转载请注明:转自 http://blog.csdn.net/littlethunder/article/details/9748519

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【Python排序搜索基本算法】之Dij

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

【Python排序搜索基本算法】之Dij

Dijkstra算法和前一篇的Prim算法非常像,区别就在于Dijkstra算法向最短路径树(SPT)中添加顶点的时候,是按照ta与源点的距离顺序进行的。OSPF动态路由协议就是用的Dijkstra算法。下面还以那个图的例子为例:代码如下:
2023-01-31

Python3 基本排序算法之冒泡排序,

基本排序算法按时间复杂度分类  O(n^2)  冒泡排序  插入排序  选择排序  Q(n log n)  分而治之  快速排序  归并排序  冒泡排序  相邻的两个元素对比,大的数后推,遍历整个列表一次后,将最大项以冒泡的方式排列i到列表
2023-01-31

Python排序算法之堆排序算法

堆排序看字面意思是一种排序方法,那堆是什么呢?堆是一个近似完全二叉树的结构,并同时满足堆积的性质。其实堆排序是指利用堆这种数据结构所设计的一种排序算法。
2023-01-07

python排序算法之归并排序

这篇文章主要介绍了python排序算法之归并排序,归并排序算法就是一个先把数列拆分为子数列,对子数列进行排序后,再把有序的子数列合并为完整的有序数列的算法,需要的朋友可以参考下
2023-05-17

python排序算法之选择排序

这篇文章主要介绍了python排序算法之选择排序,选择排序表示从无序的数组中,每次选择最小或最大的数据,从无序数组中放到有序数组的末尾,以达到排序的效果,需要的朋友可以参考下
2023-05-17

Python排序算法之冒泡排序

我们在编写代码时,经常需要对一些序列做一些排序,排序的方法很多,下面我们讲一下常用的冒泡排序法。需要的朋友可以参考下
2023-01-07

Python排序算法之 选择排序

  一、选择排序(Selection sort)  选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,所以称为:选择排序。  1、原
2023-06-02

python排序算法之希尔排序

这篇文章主要介绍了python排序算法之希尔排序,希尔排序,又叫“缩小增量排序”,是对插入排序进行优化后产生的一种排序算法,需要的朋友可以参考下
2023-05-17

java 基本算法之归并排序实例代码

java 基本算法之归并排序实例代码原理:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表, * 即把待排序序列分为若干个子序列,每个子序列是有序的。 * 然后再把有序子序列合并为整体有序序列。实例代
2023-05-31

如何快速掌握Java中的搜索算法和排序算法

这篇文章主要介绍“如何快速掌握Java中的搜索算法和排序算法”,在日常操作中,相信很多人在如何快速掌握Java中的搜索算法和排序算法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何快速掌握Java中的搜索算
2023-07-05

一文快速掌握Java中的搜索算法和排序算法

这篇文章主要为大家详细介绍了Java中常用的搜索算法和排序算法的实现,例如二分查找、冒泡排序、选择排序等,文中的示例代码讲解详细,希望对大家有所帮助
2023-05-14

PHP中有哪些基本排序算法

PHP中有哪些基本排序算法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. 冒泡排序思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调
2023-06-17

java 中基本算法之希尔排序的实例详解

java 中基本算法之希尔排序的实例详解希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。希尔排序是把记录
2023-05-31

python开发之基于thread线程搜索本地文件的方法

本文实例讲述了python开发之基于thread线程搜索本地文件的方法。分享给大家供大家参考,具体如下: 先来看看运行效果图:利用多个线程处理搜索的问题,我们可以发现他很快.... 下面是代码部分:# A parallelized "fin
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录