HDU2553-N皇后问题(DFS)
#include<iostream>#include<string.h>#include<stdio.h>#include<ctype.h>#include<algorithm>#include<stack>#include<queue>#include<set>#include<math.h>#include<vector>#include<map>#include<deque>#include<list>#define MAXN 30using namespace std;int n,sum;bool vis[3][MAXN];void dfs(int p){ if(p==n) sum++; else for(int i=0; i<n; i++) if(!vis[0][i]&&!vis[1][p+i]&&!vis[2][p-i+n]) { vis[0][i]=vis[1][p+i]=vis[2][p-i+n]=1; dfs(p+1); vis[0][i]=vis[1][p+i]=vis[2][p-i+n]=0; }}int main(){ int result[11]; for(n=1; n<=10; n++) { memset(vis,0,sizeof(vis)); sum=0; dfs(0); result[n]=sum; } while(scanf("%d",&n)&&n!=0) printf("%d\n",result[n]); return 0;}
生成的表:result[11] = {0,1,0,0,2,10,4,40,92,352,724};
所以、该题目打表就能过。