迪杰斯特拉算法

本文介绍了迪杰斯特拉算法的基本思想、实现步骤,并提供了C++代码实现。算法主要用于找到图中一点到其他所有点的最短路径,以起始点为中心层层扩展。通过path、dist和set三个数组进行状态跟踪,最后输出最短路径。其时间复杂度为O(n^2),适合节点数量较少的图。
摘要由CSDN通过智能技术生成

复习数据结构时,发现这个算法有点意思,就简单描述一下。

1.算法思想

迪杰斯特拉算法是用于去一点到途中其他点之间最短路径的算法。是图这一数据结构中相当重要的算法,他的主要特点是以起始点为中心,层层向外扩展,对一个节点应用迪杰斯特拉算法只能算出这个节点到图中其他节点之间的最短路径,最终能形成一条从起始节点开始到串联图中所有节点的路径。

下面进行这个算法实现的文字描述,这个算法实行采用的数据结构是图的邻接矩阵的存储结构。这个算法主要依赖于三个数组,path[ ]、dist[ ]、set[ ]三个数组。

path[ ]数组存储的是最终的最短路径中当前节点的额前去节点。

dist[ ]数组表示起始节点到当前节点的最短路径长度。

set[ ]数组表示的是当前节点是否已经在最短路径中,如果在,则设为1,反之,设为0。

实现步骤:

(1)

对三个数组进行初始化,set数组的所有元素出起始节点外,全部设为未访问,即0,起始节点的set值设为1,表示已经访问过。

dist数组,起始节点到当前节点有直接相连的路径的,dist值设为路径值,没有直接路径的,值设为无穷大。

path数组,也是根据路径来初始化,起始节点到当前节点有直接路径的,则那些节点的path值设为起始节点的节点标号。没有直接路径的,path值设为-1,代表没有直接前驱。

(2)

初始化完成后,先从dist数组中找出路径值最小的一个,让该值对应的节点标号进入最短路径中,即设置该节点的set值为1,设置该节点的path值为起始节点v。

(3)

然后是最核心的部分,更新dist数组的值和path数组的值。将起始节点通过新进入的节点到期其余各节点的路径值,与dist数组对应的节点的路径

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值