問題描述: 在西洋棋棋盤上,棋盤是8*8的,皇后可以吃掉其同一行列以及斜線方向的棋子,在這張棋盤上可以有多少種8個皇后的擺放方法,能夠讓各個皇后都不能吃掉其他皇后。
求解思路:回溯與遞迴演算法 python
1.確定並除錯檢測函式,檢測函式的作用是檢查當前加入的新皇后是否符合要求
12.遞迴回溯 判斷終止條件是當計算到最後一列時,首先確定第n列加入棋盤不會產生衝突,在第n+1列加入皇后,若不衝突則遞迴計算下乙個。在思想上有點像數學歸納法。defcheck(quene_list ,listnum):
2for i in
range(listnum):
3if abs(quene_list[listnum]-quene_list[i]) == listnum - i or quene_list[listnum] ==quene_list[i]:4#
當條件成立時說明新加入的皇后會被攻擊到
5return06
return 1
13.用python實現八皇后問題的完整**defquene(quene_list, listnum, num):
2global
solve_num
3if listnum ==num:
4 solve_num = solve_num + 1
5print
(quene_list)
6return 1
7else:8
for i in
range(num):
9 quene_list[listnum] =i
10if
check(quene_list, listnum):
11 quene(quene_list,listnum+1,num)
1view code#-*- coding: utf-8 -*-2#
八皇后問題的求解,遞迴回溯問題34
import
math
56 solve_num =078
defcheck(quene_list ,listnum):
9for i in
range(listnum):
10if abs(quene_list[listnum]-quene_list[i]) == listnum - i or quene_list[listnum] ==quene_list[i]:11#
當條件成立時說明新加入的皇后會被攻擊到
12return013
return 1
1415
defquene(quene_list, listnum, num):
16global
solve_num
17if listnum ==num:
18 solve_num = solve_num + 1
19print
(quene_list)
20return 1
21else:22
for i in
range(num):
23 quene_list[listnum] =i
24if
check(quene_list, listnum):
25 quene(quene_list,listnum+1,num)
2627
if__name__ == "
__main__":
28 quene_list =[0, 0, 0, 0, 0, 0, 0, 0,0]
29 num = 9
30 quene(quene_list,0, 8)
31print(solve_num)
python八皇后問題的解決方法
題目 給定乙個 n n 正方形棋盤,在上面放置 n個棋子,又叫皇后,使每兩個棋子都不在同一條橫線上 豎線上 斜線上。一般我們都討論8皇后,但是只要n 4,都會存在解的。分析 方法1 根據定義來處理,即每往棋盤中放置皇后的時候,都要判斷哪些位置可以放新加入的皇后,而哪些地方如果放置皇后的話,會造成衝突...
八皇后問題的兩種解決方法
最近看到遞迴,原本利用回溯思想解決的經典八皇后問題,其實也是可以用遞迴解決的 八皇后的遞迴解決思路 從第一行開始,依次判斷0 8列的哪一列可以放置queen,這樣就確定了該行的queen的位置,然後行數遞增,繼而遞迴實現下一行的判斷,依次類推直到行數增加到8 行數從0開始的 此時為遞迴 歸的條件,即...
遞迴演算法解決八皇后問題
在 8 8 格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。高斯認為有 76 種方案。1854 年在柏林的象棋雜誌上不同的作者發表了 40 種不同的解,後來有人用圖論的方法解出 92 種結果。這個問題也一共有92種解法 思路分析 第乙個...