Day5、Python

题目 汉诺塔 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上的盘子移动到目标塔C
        else:
                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 = 1
        n = int(input('请输入盘子的个数:'))
        print('盘子移动的方法如下:')
        hanoi(n,'A','B','C')

3、显示结果

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏落影的专栏

iOS开发-OpenGL ES入门教程4

教程 OpenGL ES入门教程1-Tutorial01-GLKit OpenGL ES入门教程2-Tutorial02-shader入门 OpenGL E...

3055
来自专栏数据小魔方

信息图表高仿——R语言仿一财经典线条比较图

今天是一个图表高仿,对象是一财经典的半圆型线条比较图,信息主要是针对2016年天猫全球购物狂欢节的当日总销售额,为了使得比较效果更有针对性,作者使用了几个中小型...

3118
来自专栏小樱的经验随笔

FZU 2167 大王叫我来巡山呐

Problem 2167 大王叫我来巡山呐 Accept: 931    Submit: 1405 Time Limit: 1000 mSec    Memo...

3459
来自专栏CreateAMind

基于ROS和gazebo对gym中robotics扩展

This work presents an extension of the initial OpenAI gym for robotics using ROS...

802
来自专栏算法+

MTCNN人脸检测 附完整C++代码

Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Neura...

1.3K5
来自专栏天天P图攻城狮

iOS GPUImage源码解读(一)

最近在不断学习、使用的过程中,有了更深刻的理解,特来写一篇源码解读的文章详细介绍下核心代码的具体实现。

1.6K9
来自专栏菩提树下的杨过

Silverlight:利用Panel实现自定义布局

虽然Silverlight提供了几种基本的布局方式,比如Canvas,Grid,StackPanel,Border...,但有时候可能仍然会觉得不够用。 这时候...

2039
来自专栏codelang

用kotlin来实现一个打方块的小游戏

1041
来自专栏iOS开发随笔

iOS UICollectionView等分有1px缝隙

1047
来自专栏Python小屋

Python绘制三次贝塞尔曲线

对于贝塞尔曲线而言,其特点在于第一个控制点恰好是曲线的起点,最后一个控制点是曲线的终点,其他控制点并不在曲线上,而是起到控制曲线形状的作用。另外,曲线的起点处与...

2956

扫码关注云+社区