欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

python 漢諾塔堆棧

錢瀠龍2年前7瀏覽0評論

漢諾塔是一種經典的遞歸問題。我們可以使用 python 的堆棧(Stack)來實現漢諾塔算法。

# 定義一個 Stack 類
class Stack:
def __init__(self):
self.items = []
def is_empty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[-1]
def size(self):
return len(self.items)
# 漢諾塔算法
def hanoi(n, source, target, auxiliary):
if n == 1:
target.push(source.pop())
else:
hanoi(n-1, source, auxiliary, target)
target.push(source.pop())
hanoi(n-1, auxiliary, target, source)
# 測試
source = Stack()
auxiliary = Stack()
target = Stack()
n = 4
for i in range(n, 0, -1):
source.push(i)
hanoi(n, source, target, auxiliary)
while not target.is_empty():
print(target.pop())

代碼解釋:

首先定義一個 Stack 類,包含 is_empty、push、pop、peek 和 size 方法。

然后定義漢諾塔算法 hanoi,接收三個參數:n 表示盤子數量,source 表示起源柱,target 表示目標柱,auxiliary 表示輔助柱。

如果盤子數量為 1,則直接將起源柱的盤子移動到目標柱。

如果盤子數量不為 1,則先把 n-1 個盤子從起源柱移動到輔助柱,然后將起源柱上最后一個盤子移動到目標柱,最后將輔助柱上的 n-1 個盤子移動到目標柱。

最后,我們可以將 n 個盤子從起源柱移動到目標柱,并打印出最終的目標柱狀態。