Hanoi塔问题:输出每步操作、当前状态及总步数

注:本文不涉及Hanoi塔算法原理,只提供Python代码实现

1. 基本代码

def Hanoi_1(n,X,Y,Z):

    def move(X,Z):
        print(f' Move from {X} to {Z}')
    if n == 1:
        move(X,Z)
    else:
        Hanoi_1(n-1,X,Z,Y)
        move(X,Z)
        Hanoi_1(n-1,Y,X,Z)

Hanoi_1(4,'X','Y','Z')

输出结果:

2. 增强代码:能够输出具体步骤、当前状态及总步数

class Hanoi_2():
    def __init__(self,n,X,Y,Z) -> None:
        import numpy as np
        self.X_ring = list(np.arange(1,n+1))
        self.Y_ring = []
        self.Z_ring = []
        self.total_num = 0
        print(f"The original status is:  X:{self.X_ring}\tY:{self.Y_ring}\tZ:{self.Z_ring}\n\n")
    def move(self,a,b,a_ring,b_ring):
        print(f'Move {a_ring[0]} from {a} to {b}')
        b_ring.insert(0,a_ring[0])
        a_ring.pop(0)
        self.total_num += 1
        print(f'The current status is:  X:{self.X_ring}\tY:{self.Y_ring}\tZ:{self.Z_ring}')
    def action(self,n,X,Y,Z):
        if n == 1:
            self.move(X,Z,eval(f'self.{X}_ring'),eval(f'self.{Z}_ring'))
        else:
            self.action(n-1,X,Z,Y)
            self.move(X,Z,eval(f'self.{X}_ring'),eval(f'self.{Z}_ring'))
            self.action(n-1,Y,X,Z)
    def cal(self):
        print(f'The total num of moving is:{self.total_num} ')

num = 4
a = Hanoi_2(num,'X','Y','Z')
a.action(num,'X','Y','Z')
a.cal()

输出结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值