N皇后問題的回溯法實現

2021-06-06 04:09:13 字數 2774 閱讀 9611

摘自《計算機演算法基礎》(華中科技大學出版社)。

#include #include #include #include #include using namespace std;

templateclass nqueen

/*使用回溯法,求出在乙個n*n的棋盤上放置n個皇后,使其不能互相攻擊的所有可能位置。 */

void nqueen()

if (column[currentrow] < n) // 找到乙個位置

else

}else}}

void printall()

);cout << endl;

});}

private:

vectorresvec; //存放所有的解

columntype column; //存放回溯過程中的一組成功解,下標代表行,陣列值代表列

//乙個皇后是否能放在第 row 行,和第 column[row] 列?

bool place(columntype& columnarray, int row)

}return true;

}};int main()

8皇后問題結果如下,列出的數字代表列數,下標代表行。

一共有92組解。

0 4 7 5 2 6 1 3

0 5 7 2 6 3 1 4

0 6 3 5 7 1 4 2

0 6 4 7 1 3 5 2

1 3 5 7 2 0 6 4

1 4 6 0 2 7 5 3

1 4 6 3 0 7 5 2

1 5 0 6 3 7 2 4

1 5 7 2 0 3 6 4

1 6 2 5 7 4 0 3

1 6 4 7 0 3 5 2

1 7 5 0 2 4 6 3

2 0 6 4 7 1 3 5

2 4 1 7 0 6 3 5

2 4 1 7 5 3 6 0

2 4 6 0 3 1 7 5

2 4 7 3 0 6 1 5

2 5 1 4 7 0 6 3

2 5 1 6 0 3 7 4

2 5 1 6 4 0 7 3

2 5 3 0 7 4 6 1

2 5 3 1 7 4 6 0

2 5 7 0 3 6 4 1

2 5 7 0 4 6 1 3

2 5 7 1 3 0 6 4

2 6 1 7 4 0 3 5

2 6 1 7 5 3 0 4

2 7 3 6 0 5 1 4

3 0 4 7 1 6 2 5

3 0 4 7 5 2 6 1

3 1 4 7 5 0 2 6

3 1 6 2 5 7 0 4

3 1 6 2 5 7 4 0

3 1 6 4 0 7 5 2

3 1 7 4 6 0 2 5

3 1 7 5 0 2 4 6

3 5 0 4 1 7 2 6

3 5 7 1 6 0 2 4

3 5 7 2 0 6 4 1

3 6 0 7 4 1 5 2

3 6 2 7 1 4 0 5

3 6 4 1 5 0 2 7

3 6 4 2 0 5 7 1

3 7 0 2 5 1 6 4

3 7 0 4 6 1 5 2

3 7 4 2 0 6 1 5

4 0 3 5 7 1 6 2

4 0 7 3 1 6 2 5

4 0 7 5 2 6 1 3

4 1 3 5 7 2 0 6

4 1 3 6 2 7 5 0

4 1 5 0 6 3 7 2

4 1 7 0 3 6 2 5

4 2 0 5 7 1 3 6

4 2 0 6 1 7 5 3

4 2 7 3 6 0 5 1

4 6 0 2 7 5 3 1

4 6 0 3 1 7 5 2

4 6 1 3 7 0 2 5

4 6 1 5 2 0 3 7

4 6 1 5 2 0 7 3

4 6 3 0 2 7 5 1

4 7 3 0 2 5 1 6

4 7 3 0 6 1 5 2

5 0 4 1 7 2 6 3

5 1 6 0 2 4 7 3

5 1 6 0 3 7 4 2

5 2 0 6 4 7 1 3

5 2 0 7 3 1 6 4

5 2 0 7 4 1 3 6

5 2 4 6 0 3 1 7

5 2 4 7 0 3 1 6

5 2 6 1 3 7 0 4

5 2 6 1 7 4 0 3

5 2 6 3 0 7 1 4

5 3 0 4 7 1 6 2

5 3 1 7 4 6 0 2

5 3 6 0 2 4 1 7

5 3 6 0 7 1 4 2

5 7 1 3 0 6 4 2

6 0 2 7 5 3 1 4

6 1 3 0 7 4 2 5

6 1 5 2 0 3 7 4

6 2 0 5 7 4 1 3

6 2 7 1 4 0 5 3

6 3 1 4 7 0 2 5

6 3 1 7 5 0 2 4

6 4 2 0 5 7 1 3

7 1 3 0 6 4 2 5

7 1 4 2 0 6 3 5

7 2 0 5 1 4 6 3

7 3 0 2 5 1 6 4

N 皇后問題 回溯法

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

回溯法 n皇后問題

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

回溯法 N皇后問題

n 皇后問題研究的是如何將n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。不能相互攻擊就是n個皇后兩兩不能同行同列同對角線。示例 輸入 4 輸出 q 解法 1 q q q.q.解法 2 q q q 解釋 4 皇后問題存在兩個不同的解法。可以利用 回溯法子集樹 模板進行求解,每個節...