資料結構演算法之python實現八皇后問題

2021-10-05 10:10:19 字數 1302 閱讀 2671

**

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...