[航海]アルゴリズム学習(白駿#11729)


白駿#11729-ハノイの塔


ショートカット

質問する


3本の棒があり、1本目の棒にはn個の半径の異なる円板が積み上げられている.各円板は半径の大きい順に積み上げられている.現在、修道僧たちは以下の規則に従って、最初の棒から3番目の棒に移動します.
一度に1枚の原版を別の塔に移すしかない.
積み上げられたフィルムはいつも上のほうが下のより小さい.
プログラムを作成し、この操作を実行するために必要な移動順序を出力します.ただし、移動回数を最小限に抑える必要があります.
下図は5枚のバックグラウンドの例です.

I/Oルール


1.入力
第1行は、第1の棒に積まれた円板の個数N(1≦N≦20)を与える.
2.出力
  • 行ごとに1つずつ、小数をインクリメント順に出力します.
  • 行目から実行プロセスの出力が開始されます.2行目から、2つの整数A BをK行に分けて出力します.これは、A番タワーの一番上の円板をB番タワーの一番上に移動することを意味します.
  • 質問へのアクセス


    一度に1枚のオリジナルしか移動できません.(2つ以上同時に運べない)
    2.積み上げられた原版は常に上のものが下のものより小さくなければならない.(大きさは反転できません)
    3.図は1번 위치가 시작점, 2번이 보조, 3번이 목표점である.3つの空間を用いて、原版の(재귀)関数を次々と移動させる.
    4.各ディスクがどのような順序で移動するかを印刷します.
    参照YouTube

    コード#コード#

    def hanoi(n, frm, to, otr):
        if n < 2:
            print(frm, to)       # frm에서 to로 이동
            return
        hanoi(n-1, frm, otr, to) # 맨 아래칸을 제외하고 frm에서 otr로 재귀적 이동
        print(frm, to)           # 맨아래 원반 목적지로 이동
        hanoi(n-1, otr, to, frm) # otr로 옮겼던 원반 to로 이동
    
    n = int(input())
    print((2**n)-1)
    hanoi(n, 1, 3, 2)