Dijkstra算法指定任意两点距离(邻接矩阵法)

本文介绍了一个使用Dijkstra算法计算无向图中任意两点最短距离的Python编程项目。通过邻接矩阵表示图,算法找到最短路径并输出路径。程序允许用户指定起点和终点,以计算它们之间的最短距离。
摘要由CSDN通过智能技术生成

Dijkstra算法指定任意两点距离(邻接矩阵法)

“最短路算法”编程项目,指定两个结点,计算最短距离并输出该路径

>题目分析:

1.选择Python语言进行算法编程模拟。
Python语言更加简洁易懂,且用列表的表示自由度更大,内置函数丰富
2.可随机输入任意图表,并指定任意两点,从而计算距离
通过构建含有n个结点的邻接矩阵来表示图标(对称矩阵表示无向图),x代表无穷大。
3.最短路径的表示方法
使用父辈结点的存储指向,最终不断回溯进行模拟。
4.函数的参数以及执行
定义dijkstra算法函数,需引入参数有三个:图的邻接矩阵matrix,所寻找路径的起始点begin,所寻找路径的终点end,通过利用多个列表参数作为其属性:
parent[i]:结点的父辈结点
collected[i] : 表示节点是否已被收录(bool类型,是则为True,不是则为False)
distTo[i] : 表示结点距离起始点begin的最短距离,每轮执行算法时需不断更新
path[end] : 最终begin结点距离end结点的最短路径(经过的结点组)

查阅内容:
1.Dijkstra算法中路径的表示方法
经过分析,可向每一个节点添加属性parent,类似指针作用,指向使其距离起始点路径长短缩小的头结点,不断进行循环回溯(起始节点的父辈结点为空(用-1表示)),最终联系成为两点间最短路径
2.Dijkstra算法中邻接矩阵以及邻接表的表示方法
可以使用邻接矩阵来表征一个图(有向图或无向图),其中的表示结点间的距离,反之亦然。其中,若初始时为直接相连,则定义为∞,其行列数相等,均等于图中结点总数。
邻接表则类似于树的结构,每一个结点中存在一个类似于属性的成员,由其保存或指向与其邻接的结点,并含有该边的权值,其中含有顺序分配和链式分配。
综合来说,无向图更适合于使用邻接矩阵法从而避免数据的冗杂。故该编程项目使用邻接矩阵法进行表示。

程序实现:

若某结点的最短路径中途不需要更新时,无法正确输出路径,最终使用parent父辈结点之间连线进行解决。

执行结果:

如图所示作为邻接矩阵的无向图的最短路径:

任意指定两点间距离,执行结果如下(例):

begin = 5, end = 1时:path: [5, 4, 1] distance: 4

begin = 0, end = 5时:path: [0, 1, 4, 5] distance: 7

Python具体代码:

x = float('inf')      #定义无穷大    
def dijkstra(mat,begin,end):
	n = len(mat)
	parent =
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值