#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: jia shilin
'''漢諾塔:::
list1,list2,list3三個陣列代表三個柱子和圓盤
數字的大小代表圓盤的大小!
數字的順序代表圓盤的順序
'''import time
import datetime
# 漢諾塔函式
def h(n, x_list, y_list, z_list, x, y, z):
global count
if (n == 1):
count += 1
print('%s->%s' % (x, z))
try:
tt = x_list.pop(0)
z_list.insert(0, tt)
except:
pass
print(list1, '################', list2, '################', list3)
else:
h(n - 1, x_list, z_list, y_list, x, z, y)
print('%s->%s' % (x, z))
try:
t = x_list.pop(0)
z_list.insert(0, t)
count += 1
except:
pass
print(list1, '################', list2, '################', list3)
h(n - 1, y_list, x_list, z_list, y, x, z)
return count
# def cpu()
count = 0 # 移動步數
num = 21 # int(input('輸入漢諾塔個數n')) #圓盤初始個數
start_time = datetime.datetime.now() # 開始計時
# 三個柱子和圓盤
list1 = list(range(1, num + 1))
list2 =
list3 =
# 初始狀態欄印
print('初始值')
print(list1, '################', list2, '################', list3)
# 呼叫h()
h(num, list1, list2, list3, 'x', 'y', 'z')
print('總共移動步數:%d' % count)
end_time = datetime.datetime.now() # 結束計時
print(start_time)
print(end_time)
# 時間差,單位秒
difference_time = (end_time - start_time).total_seconds()
print(difference_time)
percent = (35 / (difference_time + 25)) * 100
print('您的cpu跑分為:%.2f' % (percent))
python 漢諾塔 Python漢諾塔
import turtle class stack def init self self.items def isempty self return len self.items 0 def push self,item def pop self return self.items.pop def ...
漢諾塔問題python詳解 《簡單分析》漢諾塔問題
漢諾塔是乙個非常著名的遊戲,遊戲中將會有三根棍子,第一根棍子上有n個從大到小疊起來的盤子,遊戲的目標是將這n個從大到小疊起來的盤子放到第三根棍子上。每一次只允許移動乙個,而且大的盤子永遠在小的盤子的下面。這也是非常著名的遞迴入門題。我們將通過呼叫三次遞迴函式來解決這個問題。暫時不考慮 只考慮解題。先...
Python實現漢諾塔
原始碼 move n,a,b,c 這個函式不要理解為abc三個柱子。請這樣理解,move函式,用來完成這麼乙個任務 把n個盤子,從 源柱 通過 過渡柱 移動到 目標柱 上。即move n,source,bridge,destination 為了完成這個任務,需要將此母任務分解為三個子任務 1.把 源...