重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章将为大家详细讲解有关Python如何解决Hanoi塔问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
站在用户的角度思考问题,与客户深入沟通,找到东兰网站设计与东兰网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、成都做网站、外贸网站建设、企业官网、英文网站、手机端网站、网站推广、域名申请、网站空间、企业邮箱。业务覆盖东兰地区。
题目 汉诺塔
1、程序分析
Hanoi塔问题,算法分析如下,设A上有n个盘子(编号由上到下:1、2、3……、n)。A:初始塔,B:中转塔,C:目标塔
a、如果n=1,则将盘子从A塔直接移动到C塔(借助B塔)。
b、如果n=3,则:
(1)将A塔上编号1~2的盘子(2个盘子)移动到B塔上(借助C塔);
(2)将A塔上编号3的盘子(最后一个盘子)移动到C塔上;
(3)将B塔上编号1~2的盘子(2个盘子)移动到C塔上(借助A塔)。
c、延伸,如果n=num,则:
(1)将A塔上编号1~num-1的盘子(num-1个盘子)移动到B塔上(借助C塔);
(2)将A塔上编号num的盘子(最后一个盘子)移动到C塔上;
(3)将B塔上编号1~num-1的盘子(num-1个盘子)移动到C塔上(借助A塔)。
2、程序实现
#tpoic : 汉诺塔 #File Name : Hanoi.py#Author : Jack Cui#Created : 7 April 2016#第一个塔A为初始塔,中间的塔B为中转塔,最后一个塔C为目标塔def move(n,n_from,n_to):global i #声明i是全局变量print('第%d步:%d号盘子 初始塔%s-->目标塔%s' % (i,n,n_from,n_to)) i += 1#汉诺塔移动函数,将n个盘子(借助中转塔)由初始塔上移动到目标塔上def hanoi(n,n_from,n_transit,n_to):if n == 1: move(1,n_from,n_to) #只有一个盘子直接将初始塔A上的盘子移动到目标塔Celse: hanoi(n-1,n_from,n_to,n_transit)#先将初始塔A的前n-1个盘子借助目标塔C移动到中转塔B上move(n,n_from,n_to) #将初始塔A上最后一个盘子移动到目标塔C上hanoi(n-1,n_transit,n_from,n_to)#最后将中转塔上的n-1个盘子移动到目标塔上if __name__ == '__main__': i = 1n = int(input('请输入盘子的个数:')) print('盘子移动的方法如下:') hanoi(n,'A','B','C')
3、显示结果
关于“Python如何解决Hanoi塔问题”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。