我正在尝试查找无向加权图中从A到Z的最短路径。但是,生成的路径还应该经过一组无序顶点(我们只说B,C和D)。
我没有找到这个确切问题的任何答案,但是我遇到了类似的问题,将问题定义为NP-Hard(据我所知,并不是每个图形都能真正解决)。
那么,仍然存在一种算法,该算法至少会尝试找到访问所有这些顶点并折断的路径,以防在用尽合理数量的选项后找不到路径吗?
如果没有,我的替代方法是将这些必须访问的顶点排序。除了将路径拆分并为每个段(A-> B,B-> C等)计算最佳路径之外,还有找到更好的路径的方法吗?
答案 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应用于较小的图形。