wyz0326 @ 2024-11-08 22:37:57
我忘记写return了 但它AC了
#include<bits/stdc++.h>
using namespace std;
int a[130];
bool h[130],l[130],r[130];
int tot=0;
int n;
void dfs(int i){
if(i>n){
if(tot<=2){
for(int k=1;k<=n;k++){
cout<<a[k]<<" ";
}
cout<<endl;
}
tot++;
}
for(int j=1;j<=n;j++){
if((!h[j])&&(!l[i+j])&&(!r[i-j+n])){
a[i]=j;
h[j]=1;
l[i+j]=1;
r[i-j+n]=1;
dfs(i+1);
h[j]=0;
l[i+j]=0;
r[i-j+n]=0;
}
}
}
int main(){
cin>>n;
dfs(1);
cout<<tot;
return 0;
}
就离谱
by wzh11223344 @ 2024-11-08 22:40:01
我嘞个ac啊
by Zhengjingwen_mc @ 2024-11-08 22:44:20
@wyz0326 对,这个dfs其实不用retrun ,原因: 1.他不是递归函数; 2.并没有用到他的返回值
by wyz0326 @ 2024-11-08 22:59:54
@Zhengjingwen_mc 我有一点不理解的是理论上来说它就不应该跑出来啊,感觉它应该是一直卡着
by wyz0326 @ 2024-11-08 23:00:48
@Zhengjingwen_mc 有递归的部分
by wallace_QwQ @ 2024-11-08 23:13:02
八皇后问题的话,尽头会因为无法通过
if((!h[j])&&(!l[i+j])&&(!r[i-j+n])){
而自动返回吧
by Zhengjingwen_mc @ 2024-11-09 12:58:35
@wyz0326 没看到递归啊
by wyz0326 @ 2024-11-09 21:40:41
@Zhengjingwen_mc
for(int j=1;j<=n;j++){
if((!h[j])&&(!l[i+j])&&(!r[i-j+n])){
a[i]=j;
h[j]=1;
l[i+j]=1;
r[i-j+n]=1;
dfs(i+1);
h[j]=0;
l[i+j]=0;
r[i-j+n]=0;
}
}
第七行
by Zhengjingwen_mc @ 2024-11-15 09:09:44
@wyz0326 有没有一种可能,在一次递归中不符合if条件,所以没有继续递归(因为你的递归在if里面)
by wyz0326 @ 2024-11-15 18:58:40
@Zhengjingwen_mc 悟了