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 ...