E - N皇后问题
之前在洛谷上做的那个通过了之后,拿来做杭电上的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; } }