dfs | 洛谷 | P1219 八皇后

版权声明:本文纯属作者口胡,欢迎转载 https://blog.csdn.net/TQCAI666/article/details/85721869

https://www.luogu.org/problemnew/show/P1219

TLE代码

#include <bits/stdc++.h>
#define FF(a,b) for(int a=0;a<b;a++)
#define LEN 20

using namespace std;
int N;
int x[LEN];
int ans=0;

bool legal(int *a,int n){
    map<int,bool> exist_p_diag,exist_n_diag;
    for(int i=1;i<=n;i++){
        int p_diag=i-a[i];
        int n_diag=i+a[i];
        if(exist_p_diag[p_diag])
            return 0;
        else
            exist_p_diag[p_diag]=true;
        if(exist_n_diag[n_diag])
            return 0;
        else
            exist_n_diag[n_diag]=true;
    }
    return 1;
}

void backtrack(int t) {
    if (t > N){
        ans++;
        if(ans<=3) {
            for (int i = 1; i <= N; i++) {
                printf("%d", x[i]);
                if (i != N)
                    putchar(' ');
            }
            puts("");
        }
    }else
        for (int i = t; i<=N; i++){
            swap(x[t], x[i]);
            if(legal(x,t)) backtrack(t+1);
            swap(x[t], x[i]);
        }
}

int main(){
//    freopen("../in","r",stdin);
    FF(i,LEN) x[i]=i;
    cin>>N;     //N∈[6, 13]
    backtrack(1);
    cout<<ans<<endl;
}

大佬们的代码

https://www.luogu.org/problemnew/solution/P1219

猜你喜欢

转载自blog.csdn.net/TQCAI666/article/details/85721869