復(fù)雜度可能高了點(diǎn)- - 也沒(méi)太注意
我想了好久 也找了好久 沒(méi)看到什么能夠用python解決n皇后問(wèn)題而且不調(diào)用遞歸的 因?yàn)槲也惶芾斫膺f歸(尤其是到n層時(shí)) 智商受限- -
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+1n :
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中存放的就是最后所有的可行組合
當(dāng)前解決的是8皇后問(wèn)題
我的想法是用dfs 在每次搜索時(shí) 帶上該次搜索需要擺放的位置 x,y,以及待擺放的棋盤(pán) 即[x,y,A]
這樣不會(huì)導(dǎo)致所有的操作都在一個(gè)矩陣上進(jìn)行
到此這篇關(guān)于python 非遞歸解決n皇后問(wèn)題的方法的文章就介紹到這了,更多相關(guān)python 非遞歸n皇后內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- python 使用遞歸回溯完美解決八皇后的問(wèn)題
- Python八皇后問(wèn)題解答過(guò)程詳解
- Python實(shí)現(xiàn)八皇后問(wèn)題示例代碼
- python八皇后問(wèn)題的解決方法
- Python基于生成器迭代實(shí)現(xiàn)的八皇后問(wèn)題示例
- Python解決八皇后問(wèn)題示例
- python基于右遞歸解決八皇后問(wèn)題的方法