在访问某些顶点时在加权图中找到最短路径

时间:2019-08-31 21:25:33

标签: algorithm graph path-finding

我正在尝试查找无向加权图中从A到Z的最短路径。但是,生成的路径还应该经过一组无序顶点(我们只说B,C和D)。
我没有找到这个确切问题的任何答案,但是我遇到了类似的问题,将问题定义为NP-Hard(据我所知,并不是每个图形都能真正解决)。

那么,仍然存在一种算法,该算法至少会尝试找到访问所有这些顶点并折断的路径,以防在用尽合理数量的选项后找不到路径吗?

如果没有,我的替代方法是将这些必须访问的顶点排序。除了将路径拆分并为每个段(A-> B,B-> C等)计算最佳路径之外,还有找到更好的路径的方法吗?

1 个答案:

答案 0 :(得分:0)

给出一组顶点 S 和一个原始顶点 v ,您可以使用“深度优先搜索”从最接近的位置对 S 中的顶点进行排序距 v 最远的地方,那就是距离表。

实际上,创建该表会给您一个新图,该图仅由 O(nm)中的 S 个顶点组成,其中 n 是图的大小和 m 的集合 S 的大小。

您现在正在寻找穿过该新图的所有顶点的最短路径。因此,您的问题等同于该较小图上的Traveling Salesman问题。

请注意,通过adding a dummy node between your starting and end nodes强制执行Traveling Salesman算法的终点非常简单。

现在您可以选择一个known heuristic应用于较小的图形。