N皇后问题改进版

E - N皇后问题

 HDU - 2553 

之前在洛谷上做的那个通过了之后,拿来做杭电上的N皇后却超时了,百度了之后才知道要打个表,所谓打表我理解之后感觉就是先把可能的情况运行一遍,然后存在一个数组中,之后再根据所要求的数据通过之前这个数组求出

#include<iostream>
//#include<string>
#include<cstring>
using namespace std;
int ac[101];    //提前存储可能的情况
int a[101],b[101],c[101],d[101];
int tatle=0;
int n; 
int m;
void dfs(int i){
    if(i>n){
        tatle++;
    }
    for(int j=1;j<=n;j++){
        if((!b[j])&&(!c[i+j])&&(!d[i-j+n])){
            a[i]=j;
            b[j]=1;
            c[i+j]=1;
            d[i-j+n]=1;
            dfs(i+1);
            b[j]=0;
            c[i+j]=0;
            d[i-j+n]=0;
        }
        
    }
}
int main(){
    for(n=1;n<=10;n++){   //打表
        tatle=0;
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(c,0,sizeof(c));
        memset(d,0,sizeof(d));
        dfs(1);
        ac[n]=tatle;
        
    }
    while(cin>>m){
        if(m!=0){
            cout<<ac[m]<<endl;
        }
        else break;
    }
}

猜你喜欢

转载自www.cnblogs.com/ZJK132/p/12614671.html