Bootstrap

四皇后问题(回溯算法)

一、问题描述

四皇后问题:在4 ×4 的方格棋盘上放置4个皇后,使得没有两个皇后在同一行、同一列、也不在同一条45度的斜线上。问有多少种可能的布局?
4Queen-001

1、问题思路

一开始想到的最简单的办法就是去尝试,用暴力破解的办法依次去放每个皇后,最后这个问题得到的解是一个四维的向量,比如皇后一放在第1行第2列,皇后二放在第2行第4列,皇后三放在第3行第1列,皇后四放在第4行第3列。

2、向量解

在这里只记录列好就可以了,默认行好是依次排列的,因为虽然是一个二维的表格,应该是有行列坐标的,默认行号就是<1,2,3,4>。最后要求出来的是列号<2,4,1,3>或<3,1,4,2>

解是4 维向量< x1, x2, x3, x4 >

解: <2,4,1,3>,<3,1,4,2>

二、回溯算法求解

在时间复杂性和空间复杂性低的情况下,能不能设计一种算法,找出所有可能的布局。

1、搜索空间:4叉树

4Queen-002

在回溯算法里采用的策略,搜索树的空间的一种搜索方法
对皇后一来说,有4种放法,可以放在第1,2,3,4列。对皇后二而言,如果皇后一放在了第1列,那皇后二只能放在第3,4列

4Queen-003
但是如果占据了第1列和第3列,接下来就没有办法继续去放其他皇后了,这样的过程可以看成一个搜索的过程

2、搜索过程

(1)观察

先放第1个皇后,在皇后一的基础上继续放,观察有无冲突,如果有则不能放。树中虚线表示这种组合不可能成立,就不需要再进行搜索。

在依次进行搜索的过程后,只有限的一些路径能够走到最后,走到最后的路径为找到了正确的放法。那么这样的路径有多少条呢?

(2)问题转化

4叉树里找能够走通的路径有多少条,变成了4叉树的搜索过程,每一层代表第i个分量的值,找到最后就找到解,依次遍历树,就找到了解。在树的搜索过程中有回溯过程,所以这就是回溯算法。

三、问题推广

推广到八皇后问题也是一样,得到的是一个8维的向量,有92个这样的向量

例如:<1,5,8,6,3,7,2,4>是解

n皇后的问题都是同理。

;