Algorithm N+;1皇后算法

Algorithm N+;1皇后算法,algorithm,enumeration,backtracking,brute-force,n-queens,Algorithm,Enumeration,Backtracking,Brute Force,N Queens,我希望提高算法的速度,以计算N+1皇后问题的解的数量(将N+1皇后放在NxN棋盘上,用一个棋子)。 我基本上是使用蛮力结合回溯,我首先把一个棋子放在棋盘上的一个随机位置上(没有边缘和没有边缘的正方形的角),然后我开始用回溯来放置皇后。这种方法很简单,但也很慢。什么算法会更快 我想先在棋子的两边各放一个棋子和4个皇后,但我不确定这是否会提高计算速度。你自己的建议听起来很正确,因为它从任何解决方案都需要满足的基本约束开始,而不是在每个候选解决方案的事实发生后验证 对于穷举搜索问题,最大的加速通常发生

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


我想先在棋子的两边各放一个棋子和4个皇后,但我不确定这是否会提高计算速度。

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

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


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

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

您是否考虑过将其表述为约束问题,并使用标准CP解算器来解决它?这是一个需要纸、笔和逻辑而不是残酷的力的问题。这本身不是一个好的答案,但是,对于这个问题,在上描述了很多优化。我不确定我是否理解这个问题。你想让皇后们不互相攻击还是所有的皇后们都不攻击典当?这8个皇后们的问题与我试图解决的问题不一样..只是想写同样的问题。通过旋转,他可以立即将可能性降低4倍。8倍事实上,你也可以在对角线上镜像。