Dijkstra计算有向加权图的单源最短路径

Dijkstra算法是一种用于寻找加权图中单源最短路径的贪心算法。从源点开始,逐步确定每个顶点到源点的最短路径,通过不断更新邻接节点的距离实现。在邻接矩阵或邻接表表示的图中,该算法特别适合于连接稀疏的图。通过选择当前未知顶点集中距离源点最近的顶点,保证了最短路径的正确性。
摘要由CSDN通过智能技术生成

Dijkstra算法是用来解决单元最短路径的一种算法。在一个加权的图中,给定一个源点,可以使用Dijkstra算法求这个顶点到其它各个顶点的最短路径。

Dijkstra算法是一个典型的贪心算法,每一步确定一个顶点到源点的最短路径。算法开始的时候,我们可以假定所有的顶点到源的距离d均未知(可以设置这些顶点到源点的距离为一个指定的最大值),我们可以将这些顶点组成的集合成为未知顶点集;显然,源点距离源点自身的距离可以认为是0。之后我们使用一个循环,每次循环,我们查看当前位置顶点集中,到源点具有最小距离的顶点,这个距离,为源点到该点所有可达的路径中,具有最小距离的路径,这样我们就确定了该顶点到源的距离;之后我们将该顶点从未知顶点集中删除,加入到已知顶点集中(实际上代码中并不需要将该顶点添加到已知顶点集,此处只是为了叙述方便)同时更新该顶点的邻接表中的顶点的距离,如果通过该顶点到达邻接表中的结点,具有更短的距离,则将邻接表中的顶点的距离更新为新的值。最终,未知顶点集为空(这个终止条件只适用于连通图,并且源到所有结点均可达),循环结束。

Distra算法每次的结点选择使用的是贪心策略,每次选取的的顶点,是当前未知顶点集中到源点距离最小的顶点。由于这个距离是当前源通过所有已知顶点集中的能够到达的所有未知顶点集中最小的值,不可能寻找到一个更短的路径使这个距离的值变小,所以可以确定这个顶点到源点的最短距离(但是其他未知顶点的距离,是有机会通过该顶点变得更小的)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值