Pku acm 2253 Frogger数据结构题目解题报告(六)—单源最短路径:Dijkstra算法

单源最短路径问题和 Dijkstra 算法:
单源最短路径 问题描述:
给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数。另外,还给定 V 中的一个项点,称为源。现在我们要计算从源到所有其他各项点的最短路径长度。这里的长度是指路上各边权之和。这个问题通常称为单源最短路径问题。
Dijkstra算法基本思想:
Dijkstra 算法是解单源最短路径问题的一个贪心算法。其基本思想是,设置一个基点集合 S ,并不断地作贪心选择来扩充这个集合。一个项点属于集合 S 当且仅当从源到该项点的最短路径长度已知。初始时,S中仅含有源。设 u 是 G 的某一个项点,我们把从源到 u 且中间只有经过 S 中项点的路称为从源到 u 的特殊路径,并且数组 dist 来记录当前每个项点所对应的最短特殊路径长度。Dijkstra算法每次从 V-S 中取出具有最短特殊路径长度的项点 u ,将 u 添加到 S 中,同时对数组 dist 作必要的修改。
本题给出直角坐标系中的几个点求一个点到另一个点 ( 可以借助其它点 ) 的走法中最大跳最小的走法,输出最大的跳。可以用 Dijkstra 算法解决,只是贪心准则是在每一跳中取最近的一跳,直到跳到终点节点。将第 0 个点作为起点,第 1 个点作为终点,不断根据贪心准则扩大起点的集合,直到扩展到终点。
从代码上可以看出 Dijkstra 算法和 prim 算法是及其相似的,深刻理解了算法导论的说法。
带有详细注释的代码可以从 http://download.csdn.net/user/china8848/ 获得。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值