从n*n个格子中,放置n个皇后
皇后是国际象棋中最强的棋子,无论是横,竖,还是斜向,都是她的控制范围
我们需要把这n个皇后放置在这正方形的棋盘中,同时要求皇后之间不会相互影响
我看了二叉树的解决方式,是使用八叉树
即从根节点开始,其子节点分别在同一列放置一个皇后,同时各不相同
第二层同理,每一个一层子节点的子节点分别在每一个空格上放置一个皇后
这样有一个深度为9的8叉树。
这时需要遍历每一种情况,也就是说8!次遍历,将每一个满足条件的棋盘状态输出出来
这无疑是非常慢的。
于是我又学习了回溯法,它的思想可以一开始就将不符合条件的棋盘状态大部分剔除
学自
void queen(int row){
if(row==n)
total++;
else
for(int col=0;col!=n;col++){
c[row]=col;
if(is_ok(row))
queen(row+1);
}
}
算法是逐行安排皇后的,其参数row为现在正执行到第几行。n是皇后数&#x