python 非遞歸解決n皇后問題的方法
復雜度可能高了點- - 也沒太注意
我想了好久 也找了好久 沒看到什么能夠用python解決n皇后問題而且不調用遞歸的 因為我不太能理解遞歸(尤其是到n層時) 智商受限- -
import copy
def check(A,x,y):
B=[]
flag=True
for i in range(len(A)):
for j in range(len(A)):
if A[i][j]==1:
B.append([i,j])
for m in range(len(B)):
p = B[m][0]
q = B[m][1]
if y == q or (x-p)==abs(y-q):
flag=False
return flag
def queen(n):
A=[[0 for __ in range(n)] for _ in range(n)]
answer=[]
for _ in range(n):
stack=[[0,_,A]]
while stack:
judge = 0
obj=stack.pop(-1)
x=obj[0]
y=obj[1]
array=obj[2]
flag=check(array,x,y)
if not flag:
while 1:
if check(array, x, y):
break
else:
if stack:
b=stack.pop(-1)
x=b[0]
y=b[1]
array=b[2]
else:
judge=1
break
if judge==1:
break
array=copy.deepcopy(array)
array[x][y]=1
for m in range(n):
if m!=y and m!=y-1 and m!=y+1 and x+1<n :
stack.append([x+1,m,array])
# print(array)
for j in range(len(array[n-1])):
if array[n-1][j]==1:
answer.append(array)
print(len(answer))
queen(8)
answer中存放的就是最后所有的可行組合
當前解決的是8皇后問題
我的想法是用dfs 在每次搜索時 帶上該次搜索需要擺放的位置 x,y,以及待擺放的棋盤 即[x,y,A]
這樣不會導致所有的操作都在一個矩陣上進行
到此這篇關于python 非遞歸解決n皇后問題的方法的文章就介紹到這了,更多相關python 非遞歸n皇后內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python生成每日報表數據(Excel)并郵件發(fā)送的實例
今天小編就為大家分享一篇python生成每日報表數據(Excel)并郵件發(fā)送的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02
老生常談Python startswith()函數與endswith函數
下面小編就為大家?guī)硪黄仙U凱ython startswith()函數與endswith函數。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09
徹底解決No?module?named?‘torch_geometric‘報錯的辦法
這篇文章主要給大家介紹了關于如何徹底解決No?module?named?‘torch_geometric‘報錯的辦法,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2022-03-03

