社区讨论
警示后人&已ac但是有疑问
P1219[USACO1.5] 八皇后 Checker Challenge参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mhj1vzyo
- 此快照首次捕获于
- 2025/11/03 19:22 4 个月前
- 此快照最后确认于
- 2025/11/03 19:22 4 个月前
请把数组开大点!
但是我的疑问就是为什么要把数组开大。。
改前代码(12pts):
CPP改前代码(12pts):
#include <bits/stdc++.h>
using namespace std;
int ans,n;
int f[15],f1[15],f2[15],f3[15];
void dfs(int k){
if(k>n){
ans++;
if(ans<=3){
for(int i=1;i<=n;i++) cout<<f[i]<<" ";
cout<<'\n';
}
return;
}
for(int i=1;i<=n;i++){
if(f1[i]==0&&f2[k+i]==0&&f3[k-i+15]==0){
f[k]=i,f1[i]=1,f2[k+i]=1,f3[k-i+15]=1;
dfs(k+1);
f1[i]=0,f2[k+i]=0,f3[k-i+15]=0;
}
}
return;
}
int main(){
cin>>n;
dfs(1);
cout<<ans;
请不要复制粘贴代码
}
改后:(ac)
CPP#include <bits/stdc++.h>
using namespace std;
int ans,n;
int f[114514],f1[114514],f2[114514],f3[114514];
void dfs(int k){
if(k>n){
ans++;
if(ans<=3){
for(int i=1;i<=n;i++) cout<<f[i]<<" ";
cout<<'\n';
}
return;
}
for(int i=1;i<=n;i++){
if(f1[i]==0&&f2[k+i]==0&&f3[k-i+15]==0){
f[k]=i,f1[i]=1,f2[k+i]=1,f3[k-i+15]=1;
dfs(k+1);
f1[i]=0,f2[k+i]=0,f3[k-i+15]=0;
}
}
return;
}
int main(){
cin>>n;
dfs(1);
cout<<ans;
请不要复制粘贴代码
}
有大佬说一说为什么吗
回复
共 2 条回复,欢迎继续交流。
正在加载回复...