Squirrel_GZQ @ 2024-05-18 20:10:38
这道题为什么我用自写的print会RE,放在搜索函数里面就AC了?
#include<bits/stdc++.h>
using namespace std;
int n,tot,a[100],b[100],c[100],d[100];
//int print(){
// if(tot<3){
// for(int x=1;x<=n;x++){
// cout<<a[x]<<" ";
// }
// cout<<endl;
// }
// tot++;
//}
void s(int i){
if(i>n){
if(tot<3){
for(int x=1;x<=n;x++){
cout<<a[x]<<" ";
}
cout<<endl;
}
tot++;
}
else {
for(int j=1;j<=n;j++){
if(!b[j]&&!c[i+j]&&!d[i-j+n]){
a[i]=j;
b[j]=1;
c[i+j]=1;
d[i-j+n]=1;
s(i+1);
b[j]=0;
c[i+j]=0;
d[i-j+n]=0;
}
}
}
}
int main(){
cin>>n;
s(1);
cout<<tot;
return 0;
}
by lyc20120119 @ 2024-05-18 20:33:56
@Squirrel_GZQ print 里不应有 tot++
。
by leiwusi @ 2024-05-18 20:53:58
#include<bits/stdc++.h>
using namespace std;
int n,tot,a[100],b[100],c[100],d[100];
void print(){
if(tot<3){
for(int x=1;x<=n;x++){
cout<<a[x]<<" ";
}
cout<<endl;
}
tot++;
}
void s(int i){
if(i>n){
print();
}
else {
for(int j=1;j<=n;j++){
if(!b[j]&&!c[i+j]&&!d[i-j+n]){
a[i]=j;
b[j]=1;
c[i+j]=1;
d[i-j+n]=1;
s(i+1);
b[j]=0;
c[i+j]=0;
d[i-j+n]=0;
}
}
}
}
int main(){
cin>>n;
s(1);
cout<<tot;
return 0;
}
把print()的类型改成void
by Squirrel_GZQ @ 2024-05-19 11:22:32
@lyc20120119 @leiwusi
谢谢♪(・ω・)ノ