python 非遞迴解決n皇后問題

2021-10-22 06:16:59 字數 1808 閱讀 9716

python 非遞迴解決n皇后問題

複雜度可能高了點- - 也沒太注意

我想了好久 也找了好久 沒看到什麼能夠用python解決n皇后問題而且不呼叫遞迴的 因為我不太能理解遞迴(尤其是到n層時) 智商受限- -

import copy

defcheck

(a,x,y)

: b=

flag=

true

for i in

range

(len

(a))

:for j in

range

(len

(a))

:if a[i]

[j]==1:

[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

defqueen

(n):

a=[[

0for __ 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)

ifnot flag:

while1:

if check(array, x, y)

:break

else

:if stack:

b=stack.pop(-1

) x=b[0]

y=b[1]

array=b[2]

else

: judge=

1break

if judge==1:

break

array=copy.deepcopy(array)

array[x]

[y]=

1for m in

range

(n):

if m!=y and m!=y-

1and m!=y+

1and x+

1[x+1

,m,array]

)# print(array)

for j in

range

(len

(array[n-1]

)):if array[n-1]

[j]==1:

print

(len

(answer)

)queen(

8)

answer中存放的就是最後所有的可行組合

當前解決的是8皇后問題

我的想法是用dfs 在每次搜尋時 帶上該次搜尋需要擺放的位置 x,y,以及待擺放的棋盤 即[x,y,a]

這樣不會導致所有的操作都在乙個矩陣上進行

N皇后非遞迴實現

馬上上課了,以後有時間再細說。回溯 偷個懶,從老師ppt上拷過來 狀態樹 解空間樹 回溯法的求解過程實質上是乙個先序遍歷一顆狀態樹的過程,只是這棵狀態樹不是預先建立的,而是隱含在遍歷過程中。可以通過畫乙個四皇后的解空間樹來很嗨的理解,理解回溯的過程,有時間就更 約束函式 節點與解 完全解 部 死節點...

用棧 回溯 非遞迴解決N皇后問題

問題及 檔名稱 queen.cpp 作 者 單昕昕 完成日期 2016年4月4日 版 本 號 v1.0 include include include include using namespace std const int maxsize 400 typedef struct linknode ...

回溯法解決N皇后問題 遞迴與非遞迴求解

回溯法其實也是一種搜尋演算法,它可以方便的搜尋解空間。回溯法解題通常可以從以下三步入手 1 針對問題,定 空間 2 確定易於搜尋的解空間結構 3 以深度優先的方式搜尋解空間,並在搜尋的過程中進行剪枝 回溯法通常在解空間樹上進行搜尋,而解空間樹通常有子集樹和排列樹。針對這兩個問題,演算法的框架基本如下...