我有一个加权和无向图G
,有n
顶点。其中两个顶点是X
和Y
。
我需要找到最短的路径,从X
开始,在Y
结束,并通过G的所有顶点(以任何顺序)。
如何做到这一点?
这不是旅行推销员问题:我不需要访问每个顶点一次,也不想回到第一个顶点。
试着看看Dijkstra的算法
其基本思想是过滤遍历所有节点的路由,得到路径最短的路由。
卜实际上这可能不是最佳方式。
这个问题基本上是NP难的,我将给出一个证明(而不是一个适当的简化),这解释了除非P=NP,否则这个问题没有多项式解。
假设这个问题可以在多项式时间内通过某种算法A(G,x,y)
定义以下算法:
HamiltonianPath(G):
for each pair (x,y):
if A(G(x,y) == |V| - 1):
return true
return false
该算法解决了哈密顿路径问题。
-
复杂性:
算法的复杂度为O(n^2*P(n)),即多项式时间。
假设存在这样一个算法,哈密顿路径可以在多项式时间内求解,因为它(哈密顿路径问题)是NP完全的,P=NP。
本文向大家介绍访问C ++中所有节点的最短路径,包括了访问C ++中所有节点的最短路径的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个带有N个节点的无向连通图,这些节点被标记为0、1、2,...,N-1。图的长度将为N,并且仅当节点i和j连接时,j才与列表graph [i]中的i不完全相同。我们必须找到访问每个节点的最短路径的长度。我们可以在任何节点处开始和停止,可以多次访问节点,并且可以
我正在使用NetworkX Python库。对我试图解决的问题的更广泛的描述在这里。 我想找到1)至少访问每个节点一次的有效路径和2)基于边权重的至少访问每个节点一次的最短路径。 这听起来像是旅行推销员问题的一个变种。另一个值得注意的是,图几乎是无向的——大多数节点是双向连接的,只有少数几个节点是双向连接的( 我研究了NetworkX算法,但似乎没有一个能满足这个问题。 用于生成图形的代码为: 这
我试图解决一个问题,其中有一个带正加权边的无向图,我需要找到一个最短的路径,该路径正好覆盖所有节点,一旦给定了起始节点和结束节点。此外,图是完整的(每个节点都连接到图中的所有其他节点)。我已经试着寻找一个算法可以解决这个问题,但我还没有找到一个解决这个问题。由于起止节点的限制,这并不完全是旅游销售员的问题。我将感谢任何帮助。
我有一张室内地图上的无向位置图。当给定一组顶点时,我要找到覆盖所有这些顶点的最短路径。图形包含52个顶点和150-250条边。 我能用什么最好的算法来找到最短的路径。请不要混淆这是一个旅行推销员的问题。它不需要覆盖所有节点,只需要覆盖给定的节点集。
给定一个有向图,什么是只访问图的每个顶点一次的算法。这和哈密顿循环不同,我不要求路径在同一个顶点开始和结束。 回溯算法脑海中浮现的一种算法是回溯,使用递归实现,在每一步中,您都会探索所有可能的连接/路径,并保留一个布尔访问数组,以确保没有顶点被多次访问。当向后回溯时,该布尔值将设置为false(回溯中的关键步骤)。基本情况是比较访问的顶点数,并查看它是否与图中的节点数匹配,在这种情况下,它将返回t
我确实有一个图(~250个节点)。要连接到一个节点,我必须用points->加权图购买它。有些节点总是被占用(“声明的节点”),我可以从这些节点开始连接到其他节点。此外,我的点数有限。所有节点都可以连接在一起。 有什么方法可以得到一个图,其中所有的节点都必须连接在一起,点最少?如果可能的话,以给定的最大点数。 第二)有没有一种方法可以使它不需要一个完全连通的图?例如:一个“必须有节点”的节点直接连