问题描述:
在n×n的方格棋盘上,放置n个皇后,要求n个皇后两两不在一行,不在一列,不在同一对角线上
PS:
行不用检测,因为皇后本身就是一行一行往下放的,并且一行只能放一个,所以当放好一个皇后后,只需检测列及对角线的位置有无皇后 ,如下图这些位置
思路 【回溯法】
1. 从棋盘的第一行开始,依次遍历所有位置,依次判断当前位置是否能够放置皇后,判断的依据为:同该行之前的所有行中皇后的所在位置进行比较,是否在同一列,或者在同一条斜线上(斜线有两条,为正方形的两个对角线)。
2. 如果该行所有位置都不符合要求,则回溯到上一行,改变皇后的位置,继续试探。直到在当前行找到下一个合法位置。
3. 如果试探到最后一行,所有皇后摆放完毕,且找到了放置皇后的合法位置,那么解的个数加一,并再次回溯。最后一定要记得将棋盘恢复原样,避免影响下一次摆放。