八皇后问题是以国际象棋为背景的问题:有八个皇后(可以当成八个棋子),如何在 8*8 的棋盘中放置八个皇后,使得任意两个皇后都不在同一条横线、纵线或者斜线上。
![3d8c568d117a14815b1b6469c2cd16ab.png](https://img-blog.csdnimg.cn/img_convert/3d8c568d117a14815b1b6469c2cd16ab.png)
- 设八个皇后为xi,分别在第i行(i=1,2,3,4……,8);
- 问题的解状态:可以用(1,x1),(2,x2),……,(8,x8)表示8个皇后的位置;
- 由于行号固定,可简单记为:(x1,x2,x3,x4,x5,x6,x7,x8);
- 问题的解空间:(x1,x2,x3,x4,x5,x6,x7,x8),1≤xi≤8(i=1,2,3,4……,8),共88个状态;
- 约束条件:八个(1,x1),(2,x2) ,(3,x3),(4,x4) ,(5,x5), (6,x6) , (7,x7), (8,x8)不在同一行、同一列和同一对角线上。
算法解决思路:
- 从棋盘的第一行开始,从第一个位置开始,依次判断当前位置是否能够放置皇后,判断的依据为:同该行之前的所有行中皇后的所在位置进行比较,如果在同一列,或者在同一条斜线上(斜线有两条,为正方形的两个对角线