贪心算法--Dijkstra单源最短路径

今天兴致勃勃的开始做了贪心算法的第一道题目:Single-Source Shortest-Paths Problem

也就是所谓的单源最短路径,课件上有算法,但是代码实现起来还真是不容易(仅仅对于我这个菜鸟来说),下面是算法框架:

 S为最短距离已确定的顶点集(看作红点集),V-S是最短距离尚未确定的顶点集(看作蓝点集)。
①初始化

   初始化时,只有源点
s的最短距离是已知的(D(s)=0),故红点集S{s}
②重复以下工作,按路径长度递增次序产生各顶点最短路径

     在当前蓝点集中选择一个最短距离最小的蓝点来扩充红点集,以保证算法按路径长度递增的次序产生各顶点的最短路径。
     当蓝点集中仅剩下最短距离为∞的蓝点,或者所有蓝点已扩充到红点集时,
s到所有顶点的最短路径就求出来了。


 

 

示例图形如下:


 

 

 

 

Q

u

S

临接点

d[1]

d[2]

d[3]

d[4]

{01234}

 

Φ

 

{1234}

0

{0}

14

10

 

30

100

{234}

1

{0,1}

2

 

60

 

 

{24}

3

{0,1,3}

4,2

 

50

 

90

{4}

2

{0,1,3,2}

4

 

 

 

60

Φ

4

{01234}

 

 

 

 

 

 

 

有了这样思路下面就要来实现代码了:

下面是我自己写了三个小时的代码,可以输入0~4之间的任意数字,拿来给大家分享(高手别喷):

 

  

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值