c++ - 不规则网格和哈密顿路径

标签 c++ c algorithm graph-algorithm

我有一个问题。是否有一种有效的方法来获取网格图中两个节点之间的哈密顿路径,而忽略一些预定义的节点?

例如。 (4*3格)

1 0 0 0
0 0 0 0
0 0 2 3

在此网格黑白顶点 1 和 2 中找到哈密顿路径,但不覆盖 3?看起来二分图是一种方法,但根据你的说法必须是最有效的方法。问题本身是 NP 完全的。

最佳答案

删除不需要包含的节点并运行蛮力算法以找到哈密顿路径。这将花费 O((n-h)!+n),这是 NP,其中 h 是删除的节点数,但这是您能做的最好的。同样要找到哈密顿路径,有一种动态方法,但这也是指数的(O(2^n*n^2))

关于c++ - 不规则网格和哈密顿路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8638945/

相关文章:

c++ - 我可以将 C++ 字符串以流的形式传递给方法吗?

c++ - if/else 语句中的多个条件?

c++ - 函数不会接受用户输入,跳过 getline

c - SHA256 函数更改输入变量

python - 3个以上字符串的最长公共(public)子序列

c - 使用整数表示排列顺序?

c++ - 如何使用变量作为文件名?

条件数据观察点在 ARM GDB 中不起作用

c - 几个c题: static methods,数组

javascript - 使用 JavaScript 在 Photoshop 中保存每个排列