计算机算法设计与分析 之 贪心算法的单源最短路径

本文介绍了贪心算法在求解单源最短路径问题中的应用,特别是迪杰斯特拉算法的工作原理。通过逐步分析算法过程,阐述如何从一个起点开始,通过不断寻找当前未遍历点中距离起点最近的点,逐渐构建最短路径树,直至遍历完整个图,找到最短路径。
摘要由CSDN通过智能技术生成

选择算法: 单源最短路径 😂
算法概述:

  • 贪心算法,又称贪婪算法,是一种在每一步选择中都采取在当前状态下最好或最优的选择,从而希望导致结果是最好或最优的算法。
  • 单源最短路径,迪杰斯特拉(Dijkstra)的算法通过建立一组距源节点最短距离的节点,从单个源节点中找到最短路径树。

步骤分析:

  1. 假设有个图,我们给它命名为G,需要计算它的最短路径,得有个起点,所以设定起点为s
  2. 因为走遍图找到路径需要经历 “走过的最短路径”和“没走过的所有路径”这两种状态。所以我们设置两个存数据的集合M,N ;
    M表示记录了已经走过的最短路径,N表示没走过的所有路径。
  3. 初始化,集合M只包含起点,集合N只包含除起点外的所有点,
  4. 在集合N中找到距离起点s最短的点p1,然后将p1加入到集合M中,同时将p1点从集合N中移出(变量设置为ftrue即可表示)不再作为需要查找的点,下一次搜索的起点从p1的位置开始。
  5. 更新集合N中各个顶点到起点s的距离。利用p1点原来在的位置继续搜索距离p1点最近,且满足条件 (s+p + 所选择的点) < (s+p+ 其他点) 的点p2加入到集合M中,依次来推,重复这个步骤,当找完整个图的点,集合M中的s+p1+p2+……pn 即为最短路径。
const int INT = 9999; //设置最小距离为9999,这样设置是因为我们要一直执行程序,当每两个点的距离都小于9999时,将继续执行下一步,让程序走下去,但是该距离9999不录入集合M和集合N的计算中
const int MAX = 10;   //设置全图点的最多数量为10
int dist[MAX];        //表示最短距离的集合M,该集合M中每个数组的元素存储着两点之间的最短距离
int path[MAX];        //用于记录找到的最短路径的点的号码
int A[MAX][MAX
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值