杭電acm——2553(N皇后問題)
阿新 • • 發佈:2018-12-18
#include<iostream> using namespace std; #include<math.h> #include<cstring> int x[15],y[15],z[15],n,k; bool isRQ(int m) { int i=1; while(i<m) { if(x[i]==x[m]||abs(x[i]-x[m])==abs(i-m)) return false; i++; } return true; } void dfsplay(int m) { int i; if(m==k+1) { n++; return; } for(i=1;i<=k;i++) { x[m]=i; if(isRQ(m)&&y[m]==0) { y[m]=1; dfsplay(m+1); y[m]=0; } } } int main() { for(k=1;k<=10;k++) { memset(x,0,sizeof(x)); memset(y,0,sizeof(y)); n=0; dfsplay(1); z[k]=n; } while(cin>>k) { if(k==0) break; cout<<z[k]<<endl; } return 0; }