DFS(深度优先检索)
void backtracking(参数)
{
if (终止条件)
{
存放结果;
return;
}
for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小))
{
处理节点;
backtracking(路径,选择列表); // 递归,也就是到下一层咯
回溯,撤销处理结果
}
}
//八皇后问题
include[HTML_REMOVED]
using namespace std;
const int N = 8;
int sum = 0 , n;
int chessboard[N][N] = {0};
int judge(int row, int col);
void queen(int r)//r为深度,表示当前行
{
if(r == 8){//r从0开始,所以r == 8完成目标,sum
sum ;
return ;
}
for(int j = 0; j < 8; j ++){//子结点
if(judge(r, j)){
chessboard[r][j] = 1;//处理结点。该位置可以放置皇后----1
queen(r+1);//递归
chessboard[r][j] = 0;//回溯,撤销处理结果。
}
}
}
int judge(int row, int col){
if(row == 0 && col == 0) return 1;
for(int i = row - 1; i >= 0; i –)
if(chessboard[i][col]) return 0;//搜索列-----正上方
for(int i = row - 1, j = col - 1; i >= 0 && j>= 0; i –, j –)
if(chessboard[i][j]) return 0;//主对角线—左上方
for(int i = row - 1, j = col + 1; i >= 0 && j< 8; i --, j ++)
if(chessboard[i][j]) return 0;//主对角线---右上方
return 1;
}
int main(){
queen(0);
cout << sum;
return 0;
}