cx2013 @ 2024-07-18 21:13:56
#include<bits/stdc++.h>
using namespace std;
int n,num,a[100];
bool lie[100],dui[100],fandui[100];
void d(int t){
if(t==n+1){
if(num<3){
for(int i=0;i<n;++i){
cout<<a[i]<<" ";
}
cout<<endl;
}
num++;
}
for(int i=1;i<=n;++i){
if(int lie[i]==0 && dui[t-i+n]==0 && fandui[t+i]){
a[t]=i;
lie[i]=dui[t-i+n]=fandui[t+i]=1;
d(t+1);
lie[i]=dui[t-i+n]=fandui[t+i]=0;
}
}
}
int main(){
cin>>n;
d(1);
cout<<num;
return 0;
}
by zzy0618 @ 2024-07-18 21:21:46
@cx2013
到达最终要 return
,不然会无限递归。
你输出是从下标
int lie[i]==0 && dui[t-i+n]==0 && fandui[t+i]
过不了编译吧。改为 lie[i]==0 && dui[t-i+n]==0 && fandui[t+i]==0
by zzy0618 @ 2024-07-18 21:22:03
@cx2013
#include<bits/stdc++.h>
using namespace std;
int n,num,a[100];
bool lie[100],dui[100],fandui[100];
void d(int t){
if(t==n+1){
if(num<3){
for(int i=1;i<=n;++i){
cout<<a[i]<<" ";
}
cout<<endl;
}
num++;
return;
}
for(int i=1;i<=n;++i){
if(lie[i]==0 && dui[t-i+n]==0 && fandui[t+i]==0){
a[t]=i;
lie[i]=dui[t-i+n]=fandui[t+i]=1;
d(t+1);
lie[i]=dui[t-i+n]=fandui[t+i]=0;
}
}
}
int main(){
cin>>n;
d(1);
cout<<num;
return 0;
}
by cx2013 @ 2024-07-18 21:36:46
@zzy0618 太谢谢了,已经通过了