算法 如何求图中某点到其他各点的距离排序?

diguage · 2013年03月13日 · 最后由 diguage 回复于 2013年03月18日 · 4413 次阅读

如何求图中某点到其他各点的距离排序?

例如,一张图(可以理解成地图)中有 A 到 Z 共 26 个节点;每个节点之间不一定都直通。请问,如何求某点(比如 A)到其他各个节点距离的距离排序?要求,正序,从近到远?

是否有相关算法?(恕我孤陋寡闻,只知道最短路径算法。)

另外,各点之间距离等如何存储?计算结果如何存储?

#1 楼 @ywjno 这个只能求最短路径。我想要求所有路径排序的?(是某点到其他各点取最短路径,然后根据距离远近排序。)

那感觉就不是图而是树状结构了,然后计算树节点之间的值然后排序

用最短路径算法(迪杰斯特拉算法)求出 A 点到 B..Z 各点的最短路径,然后排序

直接从一个节点开始宽度优先或者深度优先遍历整个图即可,在遍历的时候更新每个节点到初始节点的距离,自己刚才快速写了一个宽度优先的实现,可以参考下(好久没写过 ruby 了,代码可能不是很优雅):

(代码已删)

EDIT:看来我没睡够觉,脑残了,直接 Dijkstra 或 SPFA 解决就行了,BFS 或 DFS 不会得到正确结果。

#3 楼 @ywjno 如果只取 A 到各个节点的最短路径,可能会是一棵树。

#4 楼 @tumayun 想到了这个方法,但是这样的话,计算复杂度就太高了。

#5 楼 @xqunix 嗯,这个想法可以考虑。我了去,我都忘了深度优先遍历和广度优先遍历了。惭愧惭愧!

#7 楼 @diguage Dijkstra 本来就是求某个点到其他所有点的最短路呀,复杂度 O(n^2) 排序 O(nlogn) 总复杂度也就 O(n^2),26 个点基本不花时间的。。。

#9 楼 @lostleaf 26 个只是打个比方,可以换成 N 个。这样复杂度是不是就不止 O(n^2)?

#5 楼 @xqunix 解决不了吧?!不是求最短路径的。SPFA 是什么东东?我得搜一下。

#11 楼 @diguage 一样的呀 如果你追求理论快感的话 可以用斐波那契堆优化到 O(nlogn)...

#12 楼 @lostleaf 确实有点理论洁癖!哈哈 “斐波那契堆”不知道是啥。回来了解了解。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号