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 以深度優先的方式搜尋解空間,並在搜尋的過程中進行剪枝 回溯法通常在解空間樹上進行搜尋,而解空間樹通常有子集樹和排列樹。針對這兩個問題,演算法的框架基本如下...