n皇后问题问题描述:
在n×n格的棋盘上放置彼此不受攻击的n(n ≤ 13) 个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于再n×n的棋盘上放置n个皇后,任何2个皇后不妨在同一行或同一列或同一斜线上。输出有多少种放置方法。
n皇后问题实际上是回溯法的一道经典问题。
个个皇后不能处于同一行,列,斜线上,可以从行出发,假设让第一个皇后处在第一行第一列的位置上,第二个自然不能处在第二行第一列和第二行第二列上了,先暂时将第二个放在第二行第三列的位置上,然后第三个皇后如果在第三列上都找不到可以放的位置,就需要调整第二个皇后的位置,如果第二个皇后调整了剩下的所有位置后都不行的话,就需要调整第一个皇后的位置了。其实这也是回溯法的思想。
从这位的博客里看到的图
可以用这个四皇后图加深回溯法的理解
#include<stdio.h>
#include<math.h>
int a[100]; //数组a[100]表示棋盘上的列,而n表示棋盘上的行
bool Place(int k) //检查n个皇后放置有效性的函数
{
for(int i=1;i<