8皇后问题(dfs)
#include<iostream>
using namespace std;
//八皇后问题
//思路:8*8的dfs,求结果个数问题(外加上条件减支即可)
//不用开二维数组
int a[8] = {0}; //a数组用来记录8行中每行皇后的位置,比如a[2]=3就表示第二行的皇后在第三个位置
int sumNum = 0;
void DFS(int i){
if(i == 8) { //i表示深度: 遍历了0——7
sumNum = sumNum + 1; //结果数+1
return;
}
//(i, j) 坐标满足条件
for(int j = 0; j < 8; j++) {
bool flag = true;
// check 选项(剪枝条件)
for(int k = 0; k < i; k++) {
if( j == a[k] || i - k == j - a[k] || i - k == a[k] - j ) {
//不在同一列
//不在对角线:即横纵坐标差的绝对值不能相同
flag = false;//减支
}
}
if(flag) {
a[i] = j; //记录这一行皇后的位置
DFS(i + 1); //深度+1
}
}
}
int main() {
DFS(0);
cout<<sumNum;
return 0;
}
这篇文章,是又一个故事的结束...
lazy's story is continuing.