【问题标题】:N+1 queens algorithmN+1皇后算法
【发布时间】:2013-04-18 14:49:27
【问题描述】:

我希望提高算法的速度,以计​​算 N+1 个皇后问题的解决方案数量(将 N+1 皇后放在带有 1 个棋子的 NxN 棋盘上)。 我基本上使用蛮力结合回溯,我首先将棋子放在棋盘上的随机位置(没有没有边缘的正方形的边缘和角落),然后我开始使用回溯放置皇后。这种方法很容易,但也很慢。什么算法会更快?

我正在考虑先在棋子的每一侧放置一个棋子和 4 个皇后,但我不确定这会提高计算速度。

【问题讨论】:

  • 您是否考虑过将其公式化为约束问题并使用标准 CP 求解器求解?
  • 这是一个需要纸、笔和逻辑而非暴力的问题。
  • 这本身并不是一个好的答案,但是wikipedia page 上针对这个问题描述了很多优化。
  • 我不确定我是否理解问题所在。你想要皇后不互相攻击还是所有皇后不攻击棋子?
  • 8皇后问题和我要解决的问题不一样..

标签: algorithm enumeration backtracking brute-force n-queens


【解决方案1】:

当您要计算问题的所有解决方案时,将棋子首先放在随机位置是行不通的。您必须将棋子放在每个位置。我相信这里最好的算法是回溯,但你仍然可以做一些优化。在 n-queen 问题中,一个重要的一点是利用解的对称性,所以我想你也可以在这里做到这一点。有了解,它的所有 4 次旋转和它们的镜像也是解。

【讨论】:

  • 只是想写一样的。使用旋转,他可以立即将可能性减少 4 倍。
  • 因子 8 实际上,您也可以在对角线中镜像。
【解决方案2】:

您自己的建议听起来是正确的,因为它从任何解决方案都需要满足的基本约束开始,而不是在事后验证每个候选解决方案。

对于穷举搜索问题,最大的加速通常出现在您实施提前退出规则时:一旦一个蜂王攻击另一个蜂王,您就不再放置任何蜂王,而是继续前进到一个新方格为最后的女王。与仅在所有棋子都放在棋盘上时才检查相互攻击的穷举搜索相比,这将大大减少搜索空间。

NxN 板上的棋子位置可以减少到内部(N-2)x(N-2) 子板上,您可以使用 8 倍旋转/镜像对称将其进一步减少到该内部正方形的八分圆之一。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 2020-08-03
    相关资源
    最近更新 更多