可以使用什么算法找到未加权的定向非循环图中最长的路径?定向未加权图中最长的非循环路径
回答
Dynamic programming。考虑到它是DAG,它也在Longest path problem中引用。
下面的代码从维基百科:
algorithm dag-longest-path is
input:
Directed acyclic graph G
output:
Length of the longest path
length_to = array with |V(G)| elements of type int with default value 0
for each vertex v in topOrder(G) do
for each edge (v, w) in E(G) do
if length_to[w] <= length_to[v] + weight(G,(v,w)) then
length_to[w] = length_to[v] + weight(G, (v,w))
return max(length_to[v] for v in V(G))
只要该图是无环,所有你需要做的是否定的边缘权重和运行任何最短路径算法。
编辑:很明显,你需要一个支持负权重的最短路径算法。另外,来自维基百科的算法似乎有更好的时间复杂性,但我会在这里留下我的答案供参考。
,我们是否保持负面权重为负? :p – Hellnar 2010-03-27 00:26:33
@Hellnar:不,如果你在原始图中有负值,他们应该变为正值。 w'= - (w) – 2010-03-27 09:55:06
维基百科有一个算法:http://en.wikipedia.org/wiki/Longest_path_problem
看起来他们使用的权重,但应与权重的工作都设置为1。
可以通过关键路径方法来解决:
1.找到一个拓扑排序
2.找到关键路径
参见[Horowitz 1995],Fundamentals of Data Structures in C++,Computer Science Press,New York。
贪婪策略(例如Dijkstra)不会工作,不管:1。使用“max”而不是“min”2.将正面权重转换为负面3.给出非常大的数字M并使用M-w作为权重。
- 1. 直接非循环图中最长的路径
- 2. 如何使用OGDF库在非循环有向图中找到最长路径?
- 3. 计算加权最短路径的未加权长度
- 4. 如何计算定向非循环图的关键路径?
- 5. 在未知大小的加权有向图上,如何迭代两个顶点之间从最短到最长的所有可能的非循环路径?
- 6. 稀疏循环图中最长的简单路径
- 7. 循环图中最长路径问题的优化
- 8. 无向图解决方案中最长路径(边权重= 1)?
- 9. 非加权图中邻接列表中的最短路径
- 10. 未加权的最短路径
- 11. 非循环图 - 顶点之间每条路径的最小权重
- 12. 未加权图的最短路径(最少节点)
- 13. 在非加权图中找到最短路径
- 14. 通过加权图的最短路径
- 15. 图最短路径无限循环
- 16. Python的DFS最短路径与加权搜索,无向图
- 17. 在加权图中确定最佳路径的算法
- 18. 未加权图/树中两个给定节点之间的最短路径
- 19. 如何找到两个节点之间的循环图中最长的路径?
- 20. 图表最长路径
- 21. 使用Boost的图breadth_first_search()在未加权的无向图中查找路径
- 22. 有序图中最长的路径
- 23. 查找有循环的有向图中的所有路径
- 24. 使用R igraph加权DAG的最长路径
- 25. 如何在有向循环图中找到最长的简单路径(包括所有中间节点)?
- 26. 定向的未加权图C
- 27. 我们可以使用BFS(以最优方式)查找加权有向非循环图中从源节点到所有其他节点的最短路径吗?
- 28. 加权图中的显示路径
- 29. 循环指导中的最短路径图
- 30. 具有彩色边的加权图中的最短路径
这只返回路径的长度。代码是否可以轻松修改以返回路径? – oschrenk 2012-04-02 20:46:12
是的,与大多数DP问题一样 - 跟踪以前的情况并重新开始。 – Larry 2012-07-17 16:34:43
'topOrder(G)'是[topological order](https://en.wikipedia.org/wiki/Topological_sorting) – 2016-10-29 14:22:32