利用Python写的展示汉诺塔(hanoi)解法的小程序_Prj003

15 篇文章 0 订阅
12 篇文章 0 订阅
本文介绍如何使用Python通过递归法解决汉诺塔问题,详细阐述了基本思路,包括将问题逐步降维至一层并移动盘子至目标杆。同时,给出了程序实现和测试案例。
摘要由CSDN通过智能技术生成

一、基本思路

        解决汉诺塔问题的最核心思路是降维攻击,噢,不对,是递归法。

        把5层汉诺塔降维成4层,4层降成3层...到1层时,直接把盘子移动到目标杆即可。

        我们汉诺塔的三个杆子分别命名为源杆,缓冲杆,目标杆。在降维的过程中三种类型的杆会相互转变,即源杆变成目标杆或缓冲杆,要特别注意这种变化。

        递归法可以很好的解决需要降维解决的问题。(具体过程直接在下述程序中给与解释)


二、程序实现

#-*- coding=utf-8 -*-
# 20150903 by PosPro
# http://blog.csdn.net/pospro
def moveTower(height, fromPole, bufferPole, targetPole):
	if height>=1: #一直执行,直到没有盘子了
		moveTower(height-1, fromPole, targetPole, bufferPole)
		#降低一维,将除底层外的所有盘子移到缓冲杆(而不是目标杆)
		moveSingleDisk(fromPole, targetPole)
		#由于上面的盘子都已经拿走,此步直接将最大盘子移到目标杆
		moveTower(height-1, bufferPole, fromPole, targetPole)
		#把缓冲杆上的所有盘子移到目标杆,这样就完成全部过程了

def moveSingleDisk(fromPole, targetPole):
	#根据杆的情况,对对应list进行增减操作,以便动态显示汉诺塔的解法过程
	if fromPole=='A' and targetPole=='C':
		C.append(A.pop())
	elif fromPole=='A' and targetPole=='B':
		B.append(A.pop())
	elif fromPole=='B' and targetPole=='C':
		C.append(B.pop())
	elif fromPole=='B' and targetPole=='A':
		A.append(B.pop())
	elif fromPole=='C' and targetPole=='A':
		A.append(C.pop())
	elif fromPole=='C' and targetPole=='B':
		B.append(C.pop())

	print "A: ", A
	print "B: ", B
	print "C: ", C
	print "=============\n"


三、输出展示

测试程序如下:

A=[4,3,2,1]  #四层汉诺塔示例,也可以自己调整成[7,6,5,4,3,2,1]测试一下七层的解法
B=[]
C=[]
print "A: ", A
print "B: ", B
print "C: ", C
print "=============\n"
moveTower(len(A),"A","B","C")

输出结果如下:(输出过长,没有完全显示,可自行执行程序察看结果)






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值