思路
考察搜索
给定一个棋盘,设左上角的坐标为原点
,已经放好的皇后坐标为
,不同行,不同列,不同斜线的新皇后坐标为
,则关系如下:
- 横向
- 纵向
- 斜对角从 到 有四种情况 综合起来就是 所以斜对角需满足
code
#include <bits/stdc++.h>
using namespace std;
int n,x,y,tol=0;
int col[14],matrix[14][14];
bool check(int r,int c){
if(matrix[r][c]) return false;
for(int i=1;i<r;i++)
if(col[i]==c||abs(col[i]-c)==abs(i-r)) return false;
return true;
}
void dfs(int r){
if(r==n+1){
tol++;
return;
}
for(int c=1;c<=n;c++){
col[r]=c;
if(check(r,c))
dfs(r+1);
}
}
int main(){
cin>>n>>x>>y;
for(int dx=-1;dx<=1;dx++)//皇上的九宫格不能放皇后
for(int dy=-1;dy<=1;dy++)
matrix[x+dx][y+dy]=1;
dfs(1);
cout<<tol<<endl;
return 0;
}