漢諾塔問題(修改版)(java實現)

2021-08-07 18:48:16 字數 999 閱讀 1184

【題目】

漢諾塔問題比較經典,這裡修改一下遊戲規則:現在限制不能從最左側的塔直接移動到最右側,也不能從最右側直接移動到最左側,而是必須經過中間。求當塔有n層的時候,列印最優移動過程和最優移動總步數。

【**實現】

class demo

//num表示盤子的總數,left是左邊的柱子,mid是中間的柱子,right是右邊的柱子,from是起始的柱子,to是終止的柱子

public

static

inthanoi(int num,string left,string mid,string right,string from,string to)

//如果只剩下乙個最頂層的盤子,分兩種情況,遞迴的終止條件

if(num==1)else

}//如果剩餘的盤子數量大於1,分兩種情況

//情況一:

//如果起始柱子是中間或者終止柱子是中間,那麼需要三步

//第一步:將第1 — num-1個盤子從起始柱子移動到臨時柱子,用遞迴實現

//第二步:將第num個盤子從起始柱子移動到終止柱子

//第三步:將第1 — num-1個盤子從臨時柱子移動到終止柱子,用遞迴實現

//最後返回三步的步數總和

//情況二:

//如果起始柱子和終止柱子不是中間,那麼無非就是從最左邊的柱子移動到最右邊的柱子或者從最右邊的柱子移動到最左邊的柱子,那麼需要五步

//第一步:將第1 — num-1個盤子從起始柱子移動到終止柱子,用遞迴實現

//第二步:將第num個盤子從起始柱子移動到中間的柱子(因為中間一定是空的)

//第三步:將第1 — num -1個盤子從終止柱子移動到起始柱子,用遞迴實現

//第四步:將第num個盤子從中間柱子移動到終止柱子

//第五步:將第1 — num-1個盤子從起始柱子移動到終止柱子

if(from.equals(mid) || to.equals(mid))else

}}

漢諾塔問題(java實現)

漢諾塔 又稱河內塔 問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片 圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。假設有x,y,z...

漢諾塔的java實現

漢諾塔問題描述 假設有三個命名為x tower 1 y tower 2 z tower 3 的塔座,在塔座x上有n個直徑大小各不相同,依次從小到大編號為1,2,3,n的圓盤。現要求將x塔座上的n個圓盤移到z塔座上並按同樣順序疊排,圓盤移動時必須遵循下列規則 1 每次只能移動乙個圓盤 2 圓盤可以插在...

java 漢諾塔問題 遞迴

stacks1 new stack stacks2 new stack stacks3 new stack s1.push 3 s1.push 2 s1.push 1 run3 3,s1,s2,s3 public static void run3 int size,stacks1,stacks2,s...