最后1个点TLE,请问该思路是否还有优化的余地

P1219 [USACO1.5] 八皇后 Checker Challenge

PaCoCo @ 2023-06-09 22:18:02

#include<iostream>

using namespace std;

int n;
int ans[15];
int board[15][15];
int cnt = 0;

void print(){
    // for(int j = 1; j<=n; j++){
    //  for(int i = 1; i<=n; i++){
    //      cout<<board[j][i]<<' ';
    //  }cout<<endl;
    // }
    for(int i = 1; i<=n; i++){
        cout<<ans[i]<<' ';
    }cout<<endl;
    // cout<<"_________________"<<endl;
}

void draw(int d, int l, int color){
    for(int i = 1; i<=n; i++){
        board[i][l] += color;
    }
    int b = d+l;
    for(int i = 1; i<=n; i++){
        if(-i+b<=0 || -i+b>n) continue;
        board[i][-i+b] += color;
    }
    b = l-d;
    for(int i = 1; i<=n; i++){
        if(i+b<=0 || i+b>n) continue;
        board[i][i+b] += color;
    }
}

void dfs(int d){
    if(d>n){
        if(cnt++<3)
            print();
        return;
    }

    for(int i = 1; i<=n; i++){
        if(board[d][i]==0){
            draw(d,i,-1);
            ans[d] = i;

            dfs(d+1);

            draw(d,i,1);
            ans[d] = 0;
        }
    }
}

int main(){
    cin>>n;
    dfs(1);
    cout<<cnt;

    return 0;
}

by lvzekai @ 2023-07-02 08:11:50

吸氧


|