白準/ハノイタワー移動順/1729


Question
質問リンク
Silver 1
Logic
デフォルトの構造:再帰

  • ハノイタワーは以下の通りです.


  • 始点1はs,目的地3はd,中間点2はtである.
  • 3-1. N=2の場合、2番目のディスクを3に送信する場合は、まず1番目のディスクを2に送信する必要があります.(1 2).
    3-2. 次に2番目のディスク(1 3)を移動し、
    3-3. 最初のディスクを再び最終目的地(23)に移動します.
    4.一般化すると、N個をSからDに移動するためには、まずN−1個をSからTに移動し、次にSからDに移動し、N−1個をTからDに移動する.
    5.次のように再帰的に表す.
    Code
    from sys import stdin
    S,T,D = '1','2','3'
    res=[]
    def hanoi(n,s,d,t):
        if n==0 : return
        hanoi(n-1,s,t,d)
        res.append(s+' '+d)
        hanoi(n-1,t,d,s)
    
    N = int(stdin.readline().rstrip())
    hanoi(N,S,D,T)
    print(len(res))
    print('\n'.join(res))