python 用回溯法(子集樹)解n皇后問題

2021-08-21 07:59:16 字數 860 閱讀 5637

n皇后問題:如何能夠在 n×n 的西洋棋棋盤上放置n個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后。為了達到此目的,任兩個皇后都不能處於同一條橫行、縱行或斜線上。

def

backtrack

(t,n):

#核心**

if t == n:

output()

return

else:

for i in range(n):

a[t],a[i]=a[i],a[t]#通過不斷的交換找到所有可能解

if(legal(t)):

backtrack(t+1,n)

a[t],a[i]=a[i],a[t]

defoutput

():#自定義輸出函式

global count

count+=1

print(str(count) + ":")#表示第n個解

for i in range(n):

print(('(%d,%d)' % (i,a[i]+1)),end=' ')

print()

deflegal

(t):

#判斷是否在一條斜線上

for i in range(t):

if abs(t - i) == abs(a[t] - a[i]):

return

false

return

true

if __name__ == '__main__':

n=int(input())

a=[i for i in range(n)]

count=0

backtrack(0,n)

Python使用回溯法子集樹模板解決迷宮問題示例

問題 給定乙個迷宮,入口已知。問是否有路徑從入口到出口,若有則輸出一條這樣的路徑。注意移動可以從上 下 左 右 上左 上右 下左 下右八個方向進行。迷宮輸入0表示可走,輸入1表示牆。為方便起見,用1將迷宮圍起來避免邊界問題。分析考慮到左 右是相對的,因此修改為 北 東北 東 東南 南 西南 西 西北...

Python使用回溯法子集樹模板解決爬樓梯問題示例

問題 某樓梯有n層台階,每步只能走1級台階,或2級台階。從下向上爬樓梯,有多少種爬法?分析這個問題之前用分治法解決過。但是,這裡我要用回溯法www.cppcns.com子集樹模板解決它。祭出元素 狀態空間分析 每一步是乙個元素,可走的步數 1,2 就是其狀態空間。不難看出,元素不固定,狀態空間固定。...

Python 回溯法 子集樹模組系列 八皇后問題

案例 八皇后問題是乙個以西洋棋為背景的問題 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題 這時棋盤的大小變為n n,而皇后個數也變成n。當且僅當 n ...