N皇后問題之回溯法

2021-06-23 01:43:43 字數 1372 閱讀 1084

time limit:1000msmemory limit:32768kb64bit io format:%i64d & %i64u

description

在n*n的方格棋盤放置了n個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。

你的任務是,對於給定的n,求出有多少種合法的放置方法。

input

共有若干行,每行乙個正整數n≤10,表示棋盤和皇后的數量;如果n=0,表示結束。

output

共有若干行,每行乙個正整數,表示對應輸入行的皇后的不同放置數量。

sample input

185

0

sample output

1

9210

再使用dfs的時候,遞迴函式降不再遞迴呼叫它自身,而是返回上一層呼叫,我們稱這種現象為回溯。

//author  :  qjs

//first edit time: 2014-08-04 13:24

//last edit time: 2014-08-04 13:24

#include #include using namespace std;

int c[1000];

int tot;

void search(int cur);

int n;

int ok;

int main()

return 0;

}void search(int cur)

else

}if (ok)//如果放置合法。則繼續遞迴。

}}}

這個第二種方法,效率比第一種高。完美的把回溯法表現出來。

//author : qjs

//first edit time: 2014-08-04 13:24

//last edit time: 2014-08-04 13:24

#include #include using namespace std;

int vis[2][100];

int tot;

void search(int cur);

int n;

int ok;

int main()

return 0;

}void search(int cur)

{ int i,j;

if(cur==n)

tot++;

else for(i=0;i

回溯法之n皇后問題

一 問題 在nxn格的棋盤上放置彼此不受攻擊的n格皇后。按照西洋棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。n後問題等價於在nxn格的棋盤上放置n個皇后,任何2個皇后不放在同一行或同一列或同一斜線上。二 演算法與分析 用陣列x i 1 i n 表示n後問題的解。其中x i 表示皇...

N 皇后問題 回溯法

n 皇后問題 在 n n 的棋盤上放置彼此不受攻擊的 n 個皇后,任意兩個皇后不同行 不同列 不同斜線。思路 1.因為皇后不能同行,所以,在每一行放置乙個皇后就行 2.當在一行放置皇后的時候 1 順序檢查這一行每乙個位置是否和上面所有的皇后,只要有乙個同列或者在斜線上就不能放置 若找到乙個滿足的,放...

回溯法 n皇后問題

問題描述 在nxn的棋盤上,放置彼此不受攻擊的n個皇后。規則 皇后可以攻擊與之在同一行,同一列,同一斜線上的棋子。以行為主導 不用再判斷是否同行了 演算法設計 1 定義問題的解空間 問題解的形式為n元組 分量xi表示第i個皇后放置在第i行,第xi列。2 解空間的組織結構 m叉樹 3 搜尋解空間 約束...