Day5Python

网友投稿 496 2022-05-28

题目 汉诺塔

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')

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

3、显示结果

Day5、Python

Python

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:HDC.Cloud 2021 | 华为云发布全球最大预训练模型,开启工业化AI开发新模式
下一篇:计算机网络探究四之使用 FreeNAS 提供网络硬盘
相关文章