HDU2553 N皇后問題 解題報告(遞迴求解)

2021-08-17 21:29:53 字數 600 閱讀 6986

題目見: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...