**
class
queeu()
:def
__init__
(self)
: self.
list=[
0]*8
self.count =
0def
chek
(self,n)
:if n==8:
self.output(
)# 呼叫了多少次output就說明有多少種解法
print
(self.count)
return
for i in
range(8
):self.
list
[n]= i
# 驗證是否合法任意兩個是否在同一行(不需要驗證,因為我每次都會對n進行+1 致使他到了該行的下一行)同一列同一斜線
if self.isvalid(n)
: self.chek(n+1)
defisvalid
(self,n)
:"""
比較當前位置的皇后和他前面的皇后是否衝突i
:param n: 第n個皇后
:return: 和前面比較是否衝突
"""for i in
range
(n):
if self.
list
[i]== self.
list
[n]or
abs(n-i)
==abs
(self.
list
[n]-self.
list
[i])
:return
false
else
:return
true
defoutput
(self)
: self.count +=
1for j in self.
list
:print
(j,end=
" ")
print()
# print(self.list)
if __name__ ==
'__main__'
: queeu=queeu(
) queeu.chek(0)
# 例如結果有個列表[0,4,7,5,2,6,1,3]
# 說明第乙個皇后在1行1列 第二個皇后2行5列 第三個皇后3行8列 ..... 這就是為什麼用列表來表示每個皇后擺放的位置
Python資料結構與演算法之 棧結構的實現
壓棧 入棧 push item 新增乙個新的元素item到棧頂。彈出 出棧 pop 彈出棧頂元素。peek 返回棧頂元素。is empty 判斷棧是否為空 size 返回棧的元素個數。coding utf 8 class stack object 棧 def init self self.list ...
python實現各種常用演算法之資料結構(1)
棧 stack 又名堆疊,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。棧允許進行插入和刪除操作的一端稱為棧頂 top 另一端為棧底 bottom 棧底固定,而棧頂浮動 棧中元素個數為零時稱為空棧。插入一般稱為進棧 push 刪除則稱為退棧 pop 由於堆疊資料結構只允許在一...
python實現各種常用演算法之資料結構(7)
並查集的介紹 建立乙個 union find 的類,並初始化。初始化兩個字典,乙個儲存節點的父節點,另外乙個儲存父節點的大小。初始化的時候,將節點的父節點設為自身,size 設為 1。class union find object def init self,data list self.fathe...