杭电 HOJ 2553 N皇后问题 解题报告
回溯法,经典题啊。发现很简单有木有。。。看代码~用数组保存sum值,否则会超时。杭电也够坑人的。。。
#include <iostream> using namespace std; int col[11],dia[21],evil[21]; int n,sum,s[11]; void DFS(int x) { int i; if(x==n+1) { sum++; return; } for(i=1;i<=n;i++) { if(!col[i] && !dia[x+i] && !evil[10+i-x]) { col[i]=dia[x+i]=evil[10+i-x]=1; DFS(x+1); col[i]=dia[x+i]=evil[10+i-x]=0; } } } int main() { memset(s,0,sizeof(s)); while(cin>>n&&n) { if(!s[n]) { memset(col,0,sizeof(col)); memset(dia,0,sizeof(dia)); memset(evil,0,sizeof(evil)); sum=0; DFS(1); s[n]=sum; } cout<<s[n]<<endl; } }