n皇后问题
//打表
深搜行,所以不需要测验行
题目:
http://acm.hdu.edu.cn/showproblem.php?pid=2553
#include<stdio.h> #include<string.h> int n; int ans; int v[55]={0},z[55]={0},c[55]={0}; void dfs(int x)//x代表行 { if(x>n) { ans++; return; } for(int i=1;i<=n;i++) { if(!v[i]&&!z[x-i+n]&&!c[x+i]) { v[i]=1; z[x-i+n]=1; c[x+i]=1; dfs(x+1); v[i]=0; z[x-i+n]=0; c[x+i]=0; } } } int main() { int r[20],q; for(n=1;n<=11;n++) { ans=0; memset(v,0,sizeof(v)); memset(z,0,sizeof(z)); memset(c,0,sizeof(c)); dfs(1); r[n]=ans; } while(1) { scanf("%d",&q); if(q==0) break; printf("%d\n",r[q]); } }
浙公网安备 33010602011771号