我正在寻求提高算法的速度,以计算N + 1皇后问题的解决方案数量(将N+1
皇后放置在NxN
棋盘上,其中包含1个棋子。
我基本上使用蛮力结合回溯,我首先在棋盘上的一个随机位置放置一个棋子(没有方形的边缘和角落没有边缘)然后我开始使用回溯来放置皇后。这种方法很简单,但也很慢。什么算法会更快?
我在考虑首先在棋子的每一侧放置一个棋子和四个皇后,但我不确定它会提高计算速度。
答案 0 :(得分:3)
当你想要计算所有问题的解决方案时,将pawn放在一个随机位置是不行的。您必须将棋子放在每个位置上。我相信这里最好的算法是回溯,但你仍然可以做一些优化。在n-queen问题中,一个重要的位是利用解决方案的对称性,所以我想你也可以在这里做到这一点。有了解决方案,它的所有4个旋转和它们的镜像都是解决方案。
答案 1 :(得分:0)
你自己的建议听起来是正确的,因为它始于任何解决方案需要满足的基本约束,而不是在事后为每个候选解决方案验证。
对于详尽的搜索问题,当你实施提前退出规则时,通常会出现最大的速度:一旦一个女王攻击另一个,你就不再放置任何女王,然后前往一个新的广场为了最后一位女王。与穷举搜索相比,这将大大减少搜索空间,在搜索中,只有当所有棋子都放在棋盘上时才会检查相互攻击。
NxN
板上的棋子位置可以缩小到内部(N-2)x(N-2)
子板,你可以使用8倍旋转/镜像对称来进一步减少到其中一个八分圆内心广场。