《《TLE》》

P1219 [USACO1.5] 八皇后 Checker Challenge

zhangzixuana @ 2023-11-23 20:52:58

#include<bits/stdc++.h>
using namespace std;
int a[14]={0},v[100000][14]={0},b,upl=1,kks=0,bm[14][14];
void xxam(int c,int k){
    if(k>b){
        for(int i=1;i<=b;i++){
            v[upl][i]=a[i];
        }
        upl++;
        for(int i=1;i<=13;i++){
            a[i]=0;
        }
        return;
    }
    for(int i=1;i<k;i++){
        if(c==a[i]) return;
    }
    for(int i=1;i<k;i++){
        xxam(i,k+1);
    }
}
void nc(int r,int s,int p){
    if(s>b){
        if(kks<=3){
            for(int i=1;i<=b;i++){
                cout<<v[p][i]<<' ';
            }
            cout<<endl;
        }
        kks++;
        nc(v[p+1][1],1,p+1);
        return;
    }
    if(bm[r][s]!=0){
        nc(v[p+1][1],1,p+1);
        return;
    }
    bm[r][s]=2;
    for(int i=1;i<=b;i++){
        bm[i][s]=1;
        bm[r][i]=1;
    }
    for(int i=1;i<=b;i++){
        for(int j=1;j<=b;j++){
            if(i+j==r+s || i-j==r-s) bm[i][j]=1;
        }
    }
    nc(v[p][s+1],s+1,p);
    return;
}
int main(){
    cin>>b;
    xxam(1,1);
    upl=1;
    if(b==6) nc(2,1,1);
    else nc(1,1,1);
}

by ImSakura @ 2023-12-31 01:15:05

这个v数组可能开的太大了?(100000


|