1. 程式人生 > >HUD--2553 N皇後問題

HUD--2553 N皇後問題

urn || using nbsp std bsp () 相互 ostream

Problem Description 在N*N的方格棋盤放置了N個皇後,使得它們不相互攻擊(即任意2個皇後不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。
你的任務是,對於給定的N,求出有多少種合法的放置方法。 Input 共有若幹行,每行一個正整數N≤10,表示棋盤和皇後的數量;如果N=0,表示結束。 Output 共有若幹行,每行一個正整數,表示對應輸入行的皇後的不同放置數量。 Sample Input 1 8 5 0 Sample Output 1 92 10

N皇後問題本質也是DFS問題,不過這題需要先打一個表吧,不然會TLE

#include<iostream>
#include
<cstring> #include<cmath> using namespace std; const int N=11; int result[N]; int queuePos[N]; int n,ans; void DFS(int k) { if(k==n+1) { ans++; return ; } for(int i=1;i<=n;i++) { int j; for(j=1;j<k;j++) { if(queuePos[j]==i||abs(queuePos[j]-i)==abs(k-j))
break; } if(j==k) { queuePos[k]=i; DFS(k+1); } } } int main() { for(int i=1;i<=10;i++) { ans=0; n=i; DFS(1); result[n]=ans; } while(cin>>n) { if(n==0) break; cout
<<result[n]<<endl; } return 0; }

HUD--2553 N皇後問題