全错!!!求助!!!help!!!

P1219 [USACO1.5] 八皇后 Checker Challenge

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

  1. 到达最终要 return,不然会无限递归。

  2. 你输出是从下标 1 开始的

  3. 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 太谢谢了,已经通过了


|