【发布时间】:2023-04-10 19:54:01
【问题描述】:
我有一个问题。有没有一种有效的方法来获取网格图中两个节点之间的哈密顿路径,而将一些预定义的节点排除在外?
例如。 (4*3格)
1 0 0 0
0 0 0 0
0 0 2 3
在这个网格中找到一条哈密顿路径 b/w 顶点 1 和 2,但不覆盖 3?似乎二分图是一种方法,但是根据您的说法,这一定是最有效的方法。问题本身是 NP 完全的。
【问题讨论】:
-
你的图形表示是什么?这些行是邻接列表吗?
-
哦,实际上,我认为我明白了。您有布置在网格上的节点,并且您在该网格上标记了三个感兴趣的顶点。对吗?
-
好吧,我必须找到编号为 1(起点)的顶点和编号为 2(终点)的顶点之间的哈密顿路径。但我不应该在我的路径中包含第 3 个顶点。
-
这张图上的连通性是什么?只是左右上下?还是对角线?所有的边权重都相等吗?
-
根据this paper 所述的问题确实是 np-complete(参见 Sect.2, Cor.2 [p.681])。
标签: c++ c algorithm graph-algorithm