贪心算法——单源最短路径

本文介绍了Dijkstra算法解决单源最短路径问题的思路,详细讲解了算法的过程,并提供了c++代码实现。在Dijkstra算法中,通过不断扩充顶点集合并更新最短路径,最终得到所有点到源点的最短路径。
摘要由CSDN通过智能技术生成

1.问题描述

       给定一个带权有向图G={V,E},以及V中的一个顶点,称为源,计算从源到其他各顶点的最短路径。

2.Dijkstra算法

       Dijkstra算法是解单源最短路径的一个贪心算法,其主要思想是:设置顶点集合S,并不断地扩充该集合S,一个点可以归并到该集合的充要条件是该点到源点的距离已知。用数组dist记录目前所有点到该点的最短路径,循环依次找出不在该集合中的(V-S)点到源点路径最短的点加入该集合(注意:数组dist记录的是所有点到源点的最短路径,在该集合(S)中的点到源点的最短路径是可能会经过S中的顶点的最短路径,V-S中的点到源点的目前最短距离是距离从该点到源点的直接路径长短)。每当加入一个新点v1,就对数组dist做必要的修改(比较源点到v1的最短路径加上v1到该点的最短路径和源点不通过v1到该点的最短路径,如果前者更短,则更新数组dist中对应的值为前者的值),依次循环直到所有的点都在集合S中(S=V),则数组d

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值