汉诺塔算法的python实现

代码示例


# Hanoi Tower Algorithm
# param:src(str), tar(str), n(int)
# src, tar, : "a", b", "c"

def hanoi(src, tar, n):
    # target value
    if n == 0:
        return
    
    # check the temp
    if (src == "a" and tar == "b") or (src == "b" and tar == "a"):
        tmp = "c"
    if (src == "b" and tar == "c") or (src == "c" and tar == "b"):
        tmp = "a"
    if (src == "a" and tar == "c") or (src == "c" and tar == "a"):
        tmp = "b"
    
    # move n-1 from src to tmp
    hanoi(src, tmp, n-1)

	# move the n from src to tar
    print("move %d from %s to %s" % (n , src, tar))

	# move n-1 from tmp to tar
    hanoi(tmp, tar, n-1)
    
hanoi("a","c",4) 

运行效果

move 1 from a to b
move 2 from a to c
move 1 from b to c
move 3 from a to b
move 1 from c to a
move 2 from c to b
move 1 from a to b
move 4 from a to c
move 1 from b to c
move 2 from b to a
move 1 from c to a
move 3 from b to c
move 1 from a to b
move 2 from a to c
move 1 from b to c

总结

1、算法第一步还是先设置好边界条件target value;
2、算法第二步找好中间柱;
3、算法第三步比较关键,就是抽象出n-1堆,从源头到中间柱;
4、算法第四步比较简单,第n个想都不用想,从源头到目标柱,感觉这个像是一个里程碑;
5、算法第五步还是把抽象的n-1堆,从中间柱到目标柱;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值