日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

回溯法:N皇后

發布時間:2024/9/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 回溯法:N皇后 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

N皇后:

N皇后是排列樹,也是n叉樹,排列數要求:n后不在對角線上;n叉樹:n后不在對角線上且不在同一列上。

約束條件:

n后不在對角線上且不在同一列上。
通過畫圖,可以輕易得到:對角線,行差距==列差距:

def place(self,k):for i in range(k):if abs(k-i) == abs(self.solution[k]-self.solution[i]) or self.solution[k]==self.solution[i]:return Falsereturn True

實現如下,遞歸方式:

class Nqueen:def __init__(self,N):self.N = Nself.sum = 0self.solution = [-1]*Nself.solutionlist = []self.depth = 0def place(self,k):for i in range(k):if abs(k-i) == abs(self.solution[k]-self.solution[i]) or self.solution[k]==self.solution[i]:return Falsereturn Truedef back_tracking(self,depth):if depth > N-1:self.sum +=1 # print self.solutionself.solutionlist += [self.solution[:]]else:for i in range(N):self.solution[depth] = iif self.place(depth):self.back_tracking(depth+1)self.solution[depth] = -1def output_nQueen(self):self.back_tracking(self.depth)return self.solutionlist,self.sum if __name__ =='__main__': N=4nqueen = Nqueen(N)list,sum =nqueen.output_nQueen()print listprint sum[[1, 3, 0, 2], [2, 0, 3, 1]] 2

迭代實現如下:

class Nqueen2:def __init__(self,N):self.N = Nself.sum = 0self.solution = [-1]*Nself.solutionlist = []self.depth = 0def place(self,k):for i in range(k):if abs(k-i) == abs(self.solution[k]-self.solution[i]) or self.solution[k]==self.solution[i]:return Falsereturn Truedef back_tracking_iteration(self):while self.depth >=0:self.solution[self.depth] +=1# 找到一個滿足條件的while self.solution[self.depth] < self.N and not self.place(self.depth):self.solution[self.depth] +=1# 子樹沒有遍歷完畢if self.solution[self.depth] <= N-1:if self.depth == N-1:self.sum += 1self.solutionlist += [self.solution[:]]# 進入下一層,初始化下一層子樹起始點 else:self.depth +=1self.solution[self.depth] =-1# 子樹遍歷完畢開始回溯 ,還是從上一層沒走完的地方繼續走 else:self.depth -=1def output_nQueen(self):self.back_tracking_iteration()return self.solutionlist,self.sum if __name__ =='__main__': N=4nqueen = Nqueen2(N)list,sum =nqueen.output_nQueen()print listprint sum[[1, 3, 0, 2], [2, 0, 3, 1]] 2

總結

以上是生活随笔為你收集整理的回溯法:N皇后的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。