在了解N皇后问题之前我们先看一下,一个古老而著名的问题:
八皇后问题
该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击 (同一行、同一列、同一斜线上的皇后都会自动攻击), 问有多少种摆法?
N皇后问题
N皇后问题是八皇后问题的推广,即在一个NxN的棋盘上放置N个皇后,使其不能互相攻击 (同一行、同一列、同一斜线上的皇后都会自动攻击) 那么问,有多少种摆法?
不管是N皇后还是八皇后甚至于之后的2N皇后都是很经典的递归、回溯问题
今天打算从新回顾一下皇后问题,所以在此留下笔记,本人愚钝,若行文有误望谅解。
具体思路:
首先确定放的方式,我在这里放的方式就是我们惯性思维的放置,先放第一行,再放第二行,再放第二行.....
然后就是细化每一步放置的操作,每一步放置的操作其实有2个:
1、判断这一行中有没有符合放置条件的位置(在不在同一行、在不在同一列、在不在对角线)所以在这里我就必须得到所有已经放置的皇后的位置(也就是第二步中记录下来的位置数组)
2、进行放置,放置的操作我们可以理解为两个步骤,第一个是记录下当前位置(这里我用了两个数组存放已经放置的皇后的行和列),第二就是进行下一个皇后的放置(这里就可以进入下一个递归)
最后就是递归的结束条件,因为我是按照每一行放