首页 新闻 会员 周边

有什么无权无向图的最短路径算法比较好,求一个用java实现的

0
悬赏园豆:30 [待解决问题]

如题,求助高手给些指点,多谢多谢,如果有多条最短路径,如何能输出所有的路径

happylifelx的主页 happylifelx | 初学一级 | 园豆:124
提问于:2014-10-30 20:10
< >
分享
所有回答(3)
0

Dijkstra

Launcher | 园豆:45045 (高人七级) | 2014-10-31 09:15

Dijkstra可以得出两点之间的所有最短路径吗,网上找到的都是只有一条。。

支持(0) 反对(0) happylifelx | 园豆:124 (初学一级) | 2014-10-31 09:23

@happylifelx: 你能把“所有最短路径”解释清楚吗?

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2014-10-31 09:30

@Launcher: 就是比如a到c有,a-b-c,还有a-d-c都是距离为2,这两条路径我想都获取,另外最好是适用于无向图的

支持(0) 反对(0) happylifelx | 园豆:124 (初学一级) | 2014-10-31 11:16

@happylifelx: 你是不是就没认真学习过 Dijkstra 算法?你问的问题怎么那么别扭?

http://blog.csdn.net/henren555/article/details/7910230

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2014-10-31 12:48

@Launcher: 我又看了一下算法,你给的这个链接他输出的是两点最短路径上的权重之和,如何能把最短路径上经过的顶点输出来吗

支持(0) 反对(0) happylifelx | 园豆:124 (初学一级) | 2014-10-31 20:21
0

我说下个人见解,用Dijkstra算法,多用个结构数组记录点的父亲,我的c++实现:http://www.cnblogs.com/jiu0821/p/4338666.html

里面的fa可以定为一个向量vector,就可以记录所有最短路径了。算法懂了,相信java实现也容易。

jiu~ | 园豆:444 (菜鸟二级) | 2015-05-09 21:53
0

因为是无权无向图,任意边的权值均为1,直接bfs就可以了,如果需要找出所以最短路径,搜到一个点时分三种情况处理:

1、之前没有达到这一点,则这次的一定是最短路,直接记录就可以了,并且继续扩展之后由这点达到的节点

2、之前达到过且路径长度与这次相等,则多记录一个前趋节点,不再扩展,因为“达到这点且长度为当前路径长度”这一状态已经在第一次达到(即情况1)时被扩展过了。

3、之前达到过且路径比这次短,则什么都不做。

因为是无权图广搜所以不可能出现当前路径短于之前记录的路径的情况。时间复杂度是BFS的O(n)(n=|V|),而dijkstra的时间复杂度是O(n^2),即使用堆优化也有O(nlogn)。

lkmcfj | 园豆:204 (菜鸟二级) | 2016-05-02 15:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册