4
A
回答
5
编辑:哎呀,误读了这个问题。感谢@jfclavette提取这个。老答案在最后。
你试图解决的问题叫做Travelling salesman problem。有很多potential solutions,但它是NP完整的,所以你不能解决大图。
老答案:
你试图找到所谓的图形的girth。可以通过设置从节点到其自身到无穷远的距离并使用Floyd-Warshall算法来解决。从节点i开始的最短周期的长度就是位置ii中的条目。
1
对于非加权图,BFS将完成这项工作。由于图形中存在潜在的循环,因此您需要跟踪访问的节点(无论如何您都需要为BFS执行此操作)。
对于加权图,可以使用bellman-Ford算法。它也能够检测周期。
2
在未加权的情况下:Breadth first search。 在加权情况下:Dijkstra's。
2
伪代码:
//INPUT: graph G = (V,E)
//OUTPUT: shortest cycle length
min_cycle(G)
min = ∞
for u in V
len = dij_cyc(G,u)
if min > len
min = len
return min
//INPUT: graph G and vertex s
//OUTPUT: minimum distance back to s
dij_cyc(G,s)
for u in V
dist(u) = ∞
//makequeue returns a priority queue of all V
H = makequeue(V) //using dist-values as keys with s First In
while !H.empty?
u = deletemin(H)
for all edges (u,v) in E
if dist(v) > dist(u) + l(u,v) then
dist(v) = dist(u) + l(u,v)
decreasekey(H,v)
return dist(s)
这个运行在每个顶点略有不同Dijkstra的。突变的Dijkstras 有几个关键的区别。首先,所有的初始距离都设为∞,即使是 也开始顶点。其次,必须首先将起始顶点放在队列中,以确保它首先脱落,因为它们都具有相同的优先级。最后, 变异Dijkstras返回到开始节点的距离。如果没有 路径返回到开始顶点,则距离保持∞。所有这些 从变异Dijkstras返回的最小值是最短路径。由于Dijkstras在O(| V |^2)的最坏情况下运行 ,并且min_cycle运行这种形式的Dijkstras | V |次, 最后的运行时间找到最短周期为O(| V |^3)。如果min_cyc返回 ∞,那么该图是非循环的。
要返回最短周期的实际路径,只需稍作修改即可。
相关问题
- 1. 有向无环图:找到特定节点的所有路径
- 2. 找到有向图的最短路径
- 3. 如何在有向循环图中找到最长的简单路径(包括所有中间节点)?
- 4. 查找覆盖neo4j中所有节点的路径
- 5. 查找有循环的有向图中的所有路径
- 6. 我们可以使用BFS(以最优方式)查找加权有向非循环图中从源节点到所有其他节点的最短路径吗?
- 7. 图中有多个“必须有”节点的最短路径
- 8. 如何找到两个节点之间的循环图中最长的路径?
- 9. 查找有向图中节点数最多的路径
- 10. 如何使用OGDF库在非循环有向图中找到最长路径?
- 11. Neo4J找到使用所有节点(无序)的最短路径密码
- 12. neo4j - 找到两个以上节点之间的所有最短路径
- 13. Neo4j - 如何找到两个节点之间的最短路径
- 14. 查找覆盖所有检查点的路径
- 15. 访问所有节点的最短路径
- 16. 图最短路径无限循环
- 17. 有向图中从一个顶点到另一个顶点的最短路径
- 18. 用最少数量的简单路径覆盖无向图的所有边缘
- 19. 启动和具有单节点结束,并覆盖所有的点在无向图的路径最短的组合
- 20. 在给定源顶点的情况下查找具有有向图中的循环的所有路径
- 21. 查找具有循环图的两点之间的所有简单路径
- 22. 找到从头到尾顶点的图中的最短路径
- 23. 找到没有指定结束节点的所有路径?
- 24. 如何表示一个无权有向图并找到最短路径? Java
- 25. 如何找到遍历无向图中最大节点数的路径?
- 26. 在未知大小的加权有向图上,如何迭代两个顶点之间从最短到最长的所有可能的非循环路径?
- 27. 如何在线删除节点时重新计算所有对最短路径?
- 28. 在mysql和php中的无向,未加权图形中的2个节点之间的所有最短路径
- 29. 如何用检查点找到迷宫中的最短路径?
- 30. 查找无向图中两个节点之间的所有可能路径
他想要找到访问所有节点的最短路径,而不是导致回到原始路径的最短周期。至少这是我从这个问题中了解到的。 – jfclavette 2009-04-25 16:23:36