http://acm.hdu.edu.cn/showproblem.php?pid=2553 不打表 果断超时!! #include<iostream> using namespace std; int n,sum; int right0[22],left0[22],row0[22]; int dfs(int i) { int j,rm,lm; rm=i; lm=n-i; for(j=0;j<n;j++,rm++,lm++) { if(right0[rm]||left0[lm]||row0[j]) continue; else { if(i>=n-1){sum++;return 0;} right0[rm]=1; left0[lm]=1; row0[j]=1; dfs(i+1); right0[rm]=0; left0[lm]=0; row0[j]=0; } } } int main() { int f[11]; for(n=1;n<=10;n++) { memset(right0,0,sizeof(right0)); memset(left0,0,sizeof(left0)); memset(row0,0,sizeof(row0)); sum=0; dfs(0); f[n]=sum; } while(cin>>n&&n!=0) { cout<<f[n]<<endl; } return 0; }