print函数

P1219 [USACO1.5] 八皇后 Checker Challenge

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

谢谢♪(・ω・)ノ


|