2017-04-21 5 views
0

私の友人が彼のハノイの塔のために書いたコードを読んでいます。しかし、彼の初期設定と終了設定がわからないので、自分のコードが何をするのか分かりにくいです。ハノイ塔の初期設定?

def T(init, final): 
    if len(init) == 0: 
     return 
    if init[0] == final[0]: 
     T(init[1:], final[1:]) 
    else: 
     fro = init[0] 
     to = final[0] 
     spare = other(init[0], final[0]) 
     ic = spare * (len(init) - 1) 
     T(init[1:], ic) 
     print("move from %s to %s " % (fro, to)) 
     T(ic, final[1:]) 

def other(char1, char2): 
    towers = "ABC" 
    towers = towers.replace(char1, "") 
    towers = towers.replace(char2, "") 
    return towers 

init = "ABCBA" 
final = "BCBAC" 
T(init, final) 

ここで、彼はinit = "ABCBA"とfinal = "BCBAC"を持っています。コードは正常に動作しますが、なぜ彼はこれをやっているのですか?

何か助けていただければ幸いです。

答えて

0

初期設定と最終設定は大文字から小文字の順番であり、それぞれの棒は文字(この場合はA、B、C)と表示されています。

init = "ABCBA"は、 'A'で最大のディスク、 'B'で2番目に大きなディスク、 'C'で3番目に大きなディスクなどがあります。あなたはBの前に座って小さなディスクを持っているので

言って、あなたが

init = "AB" 
final = "AA" 

を持っているプログラムは出力

move from B to A 

は、あなたがしなければならないすべては、AAを取得するためにAに移動することであるだろう。

関連する問題