悬赏关注

P1219 [USACO1.5] 八皇后 Checker Challenge

OIer_hzn @ 2023-02-07 20:05:09

RE

36

//
//  main.cpp
//  IDE
//
//  Created by aa on 2022/12/30.
//
//
//
#include <iostream>
#include <string>
#include <algorithm>
#include <cmath>
#include <queue>
#include <cstdio>
using namespace std;
#define ll long long
//#pragma G++ optimize(2)
//#pragma G++ optimize(3)
void inp_io(){
    std::ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
}
const ll N=105;
int fx[20]={-1,0,1,0,-1,1,1,-1};
int fy[20]={0,1,0,-1,1,-1,1,-1};
bool vis[N][N];
int a[N][N];
int b[N];
ll n,m,len;
ll ans=0;
int k=0;
// insert code here...
void dfs(int step){
    if(step==n+1){
        k++;
        for(int i=1;i<=n;i++){
            a[k][i]=b[i];
        }
        return;
    }
    for(int i=1;i<=n;i++){
        if(vis[0][i]==0&&vis[1][step+i]==0&&vis[2][step-i+8]==0){
            vis[0][i]=1;
            vis[1][step+i]=1;
            vis[2][step-i+8]=1;
            b[step]=i;
            dfs(step+1);
            vis[0][i]=0;
            vis[1][step+i]=0;
            vis[2][step-i+8]=0;
        }
    }
}
//void inp(){
//    cin>>n;
//}
//void work(){
//    dfs(1);
//    while(n--){
//        int t;
//        cin>>t;
//        for(int i=1;i<=8;i++){
//            cout<<a[t][i];
//        }
//        cout<<endl;
//    }
//}
int main(){
    //inp_io();
    //inp();
    //work();
    cin>>n;
    dfs(1);
    for(int t=1;t<=3;t++){
        for(int i=1;i<=n;i++){
            cout<<a[t][i]<<" ";
        }
        cout<<endl;
    }
    cout<<k<<endl;
    return 0;
}

by Loser_Syx @ 2023-02-07 20:12:47

@huangzhengnan8866 开大了点数组,dfs里面帮你加了个if,你可以看看

#include <iostream>
#include <string>
#include <algorithm>
#include <cmath>
#include <queue>
#include <cstdio>
using namespace std;
#define ll long long
//#pragma G++ optimize(2)
//#pragma G++ optimize(3)
void inp_io(){
    std::ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
}
const ll N=100005;
int fx[20]={-1,0,1,0,-1,1,1,-1};
int fy[20]={0,1,0,-1,1,-1,1,-1};
bool vis[3][N];
int a[4][N];
int b[N];
ll n,m,len;
ll ans=0;
int k=0;
// insert code here...
void dfs(int step){
    if(step==n+1){
        k++;
        if(k <= 3)
        for(int i=1;i<=n;i++){
            a[k][i]=b[i];
        }
        return;
    }
    for(int i=1;i<=n;i++){
        if(vis[0][i]==0&&vis[1][step+i]==0&&vis[2][step-i+8]==0){
            vis[0][i]=1;
            vis[1][step+i]=1;
            vis[2][step-i+8]=1;
            b[step]=i;
            dfs(step+1);
            vis[0][i]=0;
            vis[1][step+i]=0;
            vis[2][step-i+8]=0;
        }
    }
}
//void inp(){
//    cin>>n;
//}
//void work(){
//    dfs(1);
//    while(n--){
//        int t;
//        cin>>t;
//        for(int i=1;i<=8;i++){
//            cout<<a[t][i];
//        }
//        cout<<endl;
//    }
//}
int main(){
    //inp_io();
    //inp();
    //work();
    cin>>n;
    dfs(1);
    for(int t=1;t<=3;t++){
        for(int i=1;i<=n;i++){
            cout<<a[t][i]<<" ";
        }
        cout<<endl;
    }
    cout<<k<<endl;
    return 0;
}

|