社区讨论
挺离谱,一个N皇后问题答案是错的,但OJ测试是对的
灌水区参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @m5z122kk
- 此快照首次捕获于
- 2025/01/16 15:46 去年
- 此快照最后确认于
- 2025/11/04 11:31 4 个月前
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
const int N=15;
int a[N][N]={0};
bool flag(int x,int y){
for(int i=1;i<x;i++){
if(a[i][y]==1){
return 0;
}
}
for(int i=x-(y-1),j=1;i<x&&j<y;i++,j++){
if(a[i][j]==1){
return 0;
}
}
for(int i=x-1,j=y+1;i>=1&&j<=n;i--,j++){
if(a[i][j]==1){
return 0;
}
}
return 1;
}
int dfs(int cnt,int x,int y){
if(cnt==n){
return 1;//找到一种解
}
int s=0;
if(y!=n)
s+=dfs(cnt,x,y+1);
if(flag(x,y)){
a[x][y]=1;
s+=dfs(cnt+1,x+1,1);
a[x][y]=0;
}else{
if(y==n) return 0;
}
return s;
}
signed main() {
ios::sync_with_stdio(false);
cin>>n;
cout<<dfs(0,1,1);
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...