python-算法-汉诺塔

版权声明:所有代码均为自己总结,若有雷同请勿模仿 https://blog.csdn.net/weixin_44253023/article/details/90199762
def hnt(n,a,b,c):
	if n==1:
		print(a,'-->',c);
	else:
		hnt(n-1,a,c,b);
		print(a,'-->',c);
		hnt(n-1,b,a,c);

案列1:
假设盘子只有一个的时候N=1
只有一个步骤,将第一个盘子从A移动到C,为此,为了对比方便描述这个步骤:
步骤 盘子标号 从柱子移动 移动到柱子
1 1 A C
案例2:
—如果有两个盘子,N=2
步骤 盘子标号 从柱子移动 移动到柱子
1 1 A B
2 2 A C
3 1 B C
案列3:
步骤 盘子标号 从柱子移动 移动到柱子
1 1 A C
2 2 A B
3 1 C B
4 3 A C
5 1 B A
6 2 B C
7 1 A C
如何找盘子的规律?
最重要的就是最底下一个盘子从A移动到C
看看上面三个盘子移动和一个盘子的移动,盘子的编号和盘子的数量相同时,
步骤都是从A移动到C,其他步骤对等。
第1—3步从A移动到B,那么把B当作终点,那么1—3步理解起来和第2个案列
3个步骤相同,都是通过一个柱子来移动,和第二个案列相比。
1 1 A C(A B)
2 2 A B(A C)
3 1 C B (B C)
总结:把B变成C即可
第5—7步从B移动到C,那么把C当作终点,那么1—3步理解起来和第2个案列
3个步骤相同,都是通过一个柱子来移动,和第二个案列相比。
5 1 B A(A B)
6 2 B C(A C)
7 1 A C(B C)
总结:把B变成A即可

  1. 当盘子只有一个的时候,只有一个动作 从 A 移动到 C 即结束
  2. 当有N个盘子的时候, 中间的动作都是从 A 移动到 C,
    那么表示最下面的第N个盘子移动完毕
  3. 中间动作之上都可以认为是: 从 A 移动到 B
  4. 中间动作之下都可以认为是: 从 B 移动到 C
    步骤2,3,4 可以表示为:
    1 1 A B
    2 2 A C
    3 1 B C
    这种结构一直在重复进行。

猜你喜欢

转载自blog.csdn.net/weixin_44253023/article/details/90199762