夏老师版题解
2025-07-23 11:27:55
发布于:上海
12阅读
0回复
0点赞
夏老师正版题解(深搜)
我冒着被吃的风险才搞来的
#include<iostream>
using namespace std;
int n;
int l[15],z[30],f[30],ans,a[20];//l是列,z是主对角线,f是副对角线,ans记录方法数,a记录方法
void dfs(int id){
if(id>n){
ans++;
if(ans<=3){
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
cout<<"\n";
}
return ;
}
for(int i=1;i<=n;i++){
if(l[i] || z[id-i+n] || f[id+i]) continue;//主:行-列+n;副:行+列。(底层逻辑)
l[i]=1,z[id-i+n]=1,f[id+i]=1;
a[id]=i;
dfs(id+1);
l[i]=0,z[id-i+n]=0,f[id+i]=0;
}
}
int main(){
cin>>n;
dfs(1);
cout<<ans;
return 0;
}
全部评论 1
我是南京营的
12小时前 来自 江苏
0
有帮助,赞一个