題目見:hdu2553
用遞迴的思想求解n皇后問題,主要考慮的是每一行都放乙個皇后。
所以遞迴的想法就是每一行考慮,如考慮第k行,那就只要前面的k-1行已經確定,所以是從第一行開始遞迴下來。
這題主要還有乙個陷進,一定要打表,因為n≤10。不打表會超時。
**如下:
#include#include#include#include#includeusing namespace std;
int sum;
int n;
int queenpos[100];
int ans[15];
void nqueen(int k) //認為第0到k-1行已經排好了
printf("\n");
*/ }
for(int i = 0;i < n;i++) //擺放在第i列
if(j==k)
}}//打表
void queenans(int n)
int main()
int n;
while(cin >> n)
return 0;
}
HDU 2553 N皇后問題(詳細題解)
這是一道深搜題目!問題的關鍵是在剪枝。下面我們對問題進行分析 1.一行只能放乙個皇后,所以我們一旦確定此處可以放皇后,那麼該行就只能放乙個皇后,下面的就不要再搜了。2.每一列只能放乙個皇后,所以我們下次搜尋就不要再搜已經放過的皇后了。3.斜的45 線也只能放乙個。綜上如何才能最快速的確定一列和45 ...
HDU 2553 N皇后問題
題目 problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數...
HDU 2553 N皇后問題
復健。一題經典的回溯法,要打表。include define max n 11 int n,res int c max n ans max n void dfs int cur if flag dfs cur 1 int main int m while scanf d m m printf d n...