单源最短路径-Dijkstra算法

参考:https://blog.csdn.net/qq_35644234/article/details/60870719

问题描述:从图中的某个顶点出发到达其余任意一个顶点所经过的边的权重和最小的一条路径,称为单源最短路径。

以下图为例:

这里写图片描述

mat_adjc(邻接矩阵)

1、Dijkstra算法介绍

特点:使用了广度优先搜索解决带权有向图或者无向图的单源最短路径问题。

思路:采用的是贪心策略,声明一个数组dis来保存指定源点到各个顶点的最短距离、路径以及该顶点有没有被标记过(加入集合V)。指定源点begin,将v(begin)加入集合V,一维数组dis初始化为mat_adjc[begin-1],接下来从dis数组中选择最小且没有被标记过的顶点temp+1标记加入集合V,按照如下规则更新dis数组:

遍历dis数组,假设当前处于dis数组的第i个位置,若顶点temp+1到顶点i+1之间存在可达边,即mat_adjc[temp][i]!=INT_MAX,且v(begin)通过顶点temp+1到达i+1更近(比不通过顶点temp+1到达i+1),即dis[temp].value+mat_adjc[temp][i]<dis[i].value,更新dis[i],dis[i].value = dis[temp].value+mat_adjc[temp][i],dis[i].path = dis[temp].path+"-->v"+to_string(i+1)。

重复以上步骤,最多N次。(N为顶点数量)

实例过程如下:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值