dijkstra算法

dijkstra算法比较容易理解,但是代码有点复杂。

 

 

求从源点到其余各点的最短路径的算法的基本思想:

 

其中,从源点到顶点v的最短路径是所有最短短路径中长度最短者。

 

路径长度最短的最短路径的特点:

在这条路径上,必定只含一条弧,并且这条弧的权值最小。

 

下一条路径长度次短的最短路径的特点:

它只可能有两种情况:或者是直接从源点到该点(只含一条弧); 或者是,从源点经过顶点v1,再到达该顶点(由两条弧组成)。

 

再下一条路径长度次短的最短路径的特点:

它可能有三种情况:或者是,直接从源点到该点(只含一条弧); 或者是,从源点经过顶点v1,再到达该顶点(由两条弧组成);或者是,从源点经过顶点v2,再到达该顶点

 

其余最短路径的特点:

它或者是直接从源点到该点(只含一条弧); 或者是,从源点经过已求得最短路径的顶点,再到达该顶点

试用范围:

1.dijkstra算法实现单源最短路径查找,路径查找
2.有向图和无向图都可以使用本算法,无向图中的每条边可以看成相反的两条边。
3.用来求最短路的图中不能存在负权边。

 

具体实现请看算法,下图为简单测试图例

 

dijkstra算法还有另一种实现,利用队列进行优先级管理,时间复杂度为O((n-2)(n-1)/2),上面dijkstra算法实现的时间复杂度为O((n-2)(n-1)),很明显下面的实现效率是上面的两倍

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值