我应该使用什么图表遍历算法呢?

时间:2010-08-26 18:34:33

标签: algorithm

我需要以某种方式遍历有向图,我不确定要使用的算法。也许Stackoverflow可以提供帮助。

情况 - 我有一个有向图,其中边有一个与之相关的数字。我们假设这个数字是以英尺,英里,......为单位测量的距离。 我想从起始节点遍历并找到距起始节点一定距离的所有边

例如,我想从某个节点开始并遍历图表,找到我从一开始就走100英里的每个边缘。 例如(2), start_node ---- edge-1(80英里)--->节点(2)---- edge-2(40英里)--->节点(3)---边缘-3(50英里)--- start_node ---- edge-4(40英里)---> node(4)---- edge-5(70 miles)---> node(5)--- edge-6(50英里)---

从start_node开始并行驶100英里,答案将是edge-2,edge-5。 关于我应该使用/考虑什么遍历算法的任何想法?

由于

4 个答案:

答案 0 :(得分:3)

我会选择Dijkstra algorithm。只需在最后一个标记节点的路径超过定义时停止。

答案 1 :(得分:2)

答案 2 :(得分:2)

假设没有多次遍历可以遍历,那么你的问题就是Longest path problem的概括,这是NP难的。因此,像Dijkstra算法这样的多项式时间方法是行不通的。

如果您的图形不是很大,您可以进行动态编程:一个表D [v,k]存储每个顶点v和每个边缘的所有可能距离从根到v与k边缘,加上所有每个可能距离的可能前辈。如果D [v,k-1]完成,则可以填写D [v,k]。你重复这个,直到距离不再低于100,然后你就可以从已经达到100的成本的每个顶点做回溯。

答案 3 :(得分:0)

我认为你可以使用类似于Dijkstra算法的东西

http://en.wikipedia.org/wiki/Dijkstra“s_algorithm