八皇后问题的变体,N皇后问题,dfs+回溯即可
真正实现的时候还是遇到了点问题,递归式边界返回条件,一定要等到row已经到N之外才可以,因为这才意味着第N行的点也通过了考验,搜索到第N行并不意味着结束,还有相当关键的临门一脚(感觉对这个问题还有代码是一个双关)
#include <iostream>
#include <algorithm>
#include <queue>
#include <string>
#include <vector>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <stack>
#include <map>
#include <set>
using namespace std;
const int maxn= 15;
int n;
int col[maxn], ans[maxn];
int DFS(int row)
{
if (row> n){
return 1;
}
int ans= 0;
for (int i= 1; i<= n; ++i){
int flag= 1;
for (int j= 1; j< row; ++j){
if (col[j]== i || row+i == j+col[j] || row-i == j-col[j]){
flag= 0;
break;
}
}
if (flag){
col[row]= i;
ans+= DFS(row+1);
}
}
return ans;
}
int main(int argc, char const *argv[])
{
for (int i= 1; i<= 10; ++i){
n= i;
ans[i]= DFS(1);
}
while (~scanf("%d", &n) && n){
printf("%d
", ans[n]);
}
return 0;
}