有没有一种方法可以使用弗洛伊德-沃歇尔算法给出最短路径,其中存在负权重循环而不允许重叠边缘?
Is there a way that gives shortest path using Floyd-Warshall's algorithm where negative weight cycle exists whereas overlapped edges are not allowed?
我们知道,如果图中出现负权重循环,则 Floyd-Warsshall 算法的结果无效,这是因为在负权重周期上多次旅行会使权重总和任意小。但是,如果我们指定不允许在上面移动重复的边,则权重总和在意义上是正确的。我想知道一种在这种情况下产生最小权重总和的方法。已经尝试了对算法的一些修改(包括当从某个顶点到自身的权重和为负时跳过循环(,但前一个矩阵仍然很奇怪,权重和矩阵完全没用(偶然我知道它的值将不可避免地发生指数增长,见链接(。
这个问题的有效解决方案意味着P=NP,所以几乎肯定没有这样的解决方案。
使用问题的多项式时间解决方案,您可以通过将所有边权重设置为 -1 并请求两个节点之间的最短路径来解决最长跟踪问题。
正如Marzio De Biasi在链接的帖子中所证明的那样,最长轨迹问题的解决方案可用于解决最大次数为3的网格图上的哈密顿循环问题,方法是将两个新节点连接到左上角节点并请求最长的轨迹。
当限制在最大次数为3的网格图时,哈密顿循环问题仍然是NP完全的,正如Christos H Papadimitriou,Umesh V Vazirani,关于与旅行推销员问题相关的两个几何问题所证明的那样,算法杂志,第5卷,第2期,1984年6月,第231-246页,ISSN 0196-6774。
因此,您的问题是NP困难的。
相关文章:
- 内存效率表示最短路径的方法?
- 用于查找网格中最短路径的算法
- 查找最短路径算法
- BFS 打印最短路径
- 使用 Dijkstra 算法跟踪两个节点之间的最短路径
- 使用C++具有两个数字的最短路径算法.(C++)
- 使用迭代深度优先搜索算法的未加权图的最短路径
- 如何仅在 2 个节点之间获取最短路径,给定邻接列表有向图?
- 如何使用贝尔曼-福特算法返回所有具有捆绑重量的最短路径?
- 使用优先级队列查找所有与 Dijkstra 相同的最短路径
- 尝试在图形中查找最短路径时的无限循环
- C++计算有向图中的最短路径
- 使用BFS存储和打印最短路径
- 如何制作由原始图形的最短路径边组成的新图形
- 有没有一种方法可以使用弗洛伊德-沃歇尔算法给出最短路径,其中存在负权重循环而不允许重叠边缘?
- 加权图的开始和结束的最短路径
- 使 c++11 Dijkstra 实现返回最短路径
- 弗洛伊德最短路径算法C++
- Dijkstra 最短路径算法性能 std::p riority_queue VS std::set.
- 我在 OpenMP 中实现 Dijkstra 最短路径算法时可能存在的范围问题?