【发布时间】:2016-06-11 22:29:16
【问题描述】:
我目前正在编写一段代码来解决数字游戏:
- 从一个 10x10 的空网格开始。
- 将 1 放置在随机方块中。
- 在积木中依次填写数字 2-100。
- 上、下、左、右 - 您必须将数字放在 3 个街区之外。
- 对角线 - 您必须将数字放置在 2 个街区之外。
我尝试实现深度优先搜索算法来搜索所有路径以找到(可能的)解决方案。我遇到的问题是,当搜索到达没有更多有效移动和回溯的状态时,我无法将块标记为已访问,因为解决方案将不可避免地使用另一条路径中的该块,但如果我不标记它们访问后,搜索将无限次循环和重新搜索路径。
这个问题有什么优雅的解决方案吗?还是我应该研究其他搜索算法来解决问题?任何指向正确方向的提示将不胜感激。
示例(前 3 步):
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . 1 . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . 1 . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . 2 . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . 1 . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . 2 . . . .
. . . . . . . . . .
. . . 3 . . . . . .
. . . . . . . . . .
【问题讨论】:
-
你能举个第4条和第5条规则的例子吗?
-
是的,当然。很抱歉有点含糊。
-
您的意思是,在您放置一个号码后,下一个号码正好有 8 个可能的位置?要么向右 3 个位置,要么向左,要么向上,要么向下,或者 2 个位置在左下,或者在右下,或者在左上,或者在右上?假设这 8 个仍然在 10x10 的正方形内。
-
是的。并假设这 8 个块还没有包含另一个数字。
-
寻找哈密顿路径的问题是NP完全的,因此没有已知的有效通用解决方案。
标签: algorithm graph depth-first-search