暴搜74pts求优化

P1219 [USACO1.5] 八皇后 Checker Challenge

woscxk @ 2024-05-22 12:49:37

rt

#include<bits/stdc++.h>
using namespace std;
bool check(int m[],int s){
    bool b[14]={};
    for(int i=0;i<s;i++){
        if(b[i])return 0;
        else b[i]=1;
    }for(int i=0;i<s;i++){
        for(int j=i+1;j<s;j++){
            if(abs(m[i]-m[j])==abs(i-j))return 0;
        }
    }return 1;
}
int main(){
    int m[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19},n,fac=1;
    cin>>n;
    int cnt=0;
    for(int i=n;i>=1;i--)fac*=i;
    for(int i=0;i<fac;i++){
        if(check(m,n)){
            if(cnt<3){
                for(int i=0;i<n;i++){
                    cout<<m[i]<<" ";
                }
                cout<<'\n';
            }cnt++;
        }
        next_permutation(m,m+n);
    }
    cout<<cnt;
}

by J_Kobe @ 2024-05-22 13:06:27

@woscxk 你的搜索里为什么要用两重循环啊,这样就会超时啊。


by Fryderyk_Chopin @ 2024-05-22 13:10:23

@woscxk 用回溯


by woscxk @ 2024-05-22 13:39:16

那怎么优化啊qwq


|