[白俊]1729号:ハノイタワー(Python)



質問する

私の答え
n=int(input())
def hanoi(num,start,mid,end):
    
    if num==1:
        print(start,end)

    else:
        hanoi(num-1,start,end,mid)	#가장 아래에 있는 원판 제외 나머지 2로 이동(1->2)
        print(start,end)	#처음 장대에 남은 마지막 원판을 3으로(1->3)
        hanoi(num-1,mid,start,end)	#2번째 장대에 있는 다른 원판을 3으로(2->3)

print(2**n-1)
hanoi(n,1,2,3)
方法
  • ハノイタワーアルゴリズム、問題を返します.
  • の棒は全部で3つあり、すべての原版は最初のものから最後のものに移せばいいです.
  • で3つの段階に分けられます
  • 1)一番下の円盤を除き、残りの(n−1個)を第1の棒の上で第2の円盤に移動する.
  • 2)その後、一番下の円板を1本目の棒で最後に移動します.
  • 3)最後に、2本目のロッド上の別の円板を移動する.
  • 図に示すように、(n==3)
  • コード#コード#
  • ハノイ再帰関数を定義します.(def hanoi)関数のパラメータには、円板の数(num)開始位置(start)、中間位置(mid)、ターゲット位置(end)が必要です.
  • 原版の数が1個であれば、最初から最後に移動するだけで、開始位置と最後の位置を出力することができます.
  • でなければ、上の3段階を表す.hanoi(num-1,start,end,mid)は、n以外の残りの部分を開始位置から中間位置midに移動する.print(start,end)を使用して、第1のロッドに残っているディスクを最後に移動します.
    最後に、第2のロッド上のn−1個のディスクをhanoi(num-1,mid,start,end)で最後のロッド上に移動させた.
  • 最後に移動回数
  • を出力し、関数を呼び出す.
  • ハノイタワー移動回数
    移動回数は良い位置付けを発見し、関連記事を参照します。:)