陣列模擬漢諾塔問題

2021-08-09 17:31:41 字數 1176 閱讀 5187

#includeint step=0;   //全域性變數step用於統計步數

int main()

; int mid[5]=,right[5]=; //用三個陣列模擬三個柱子,5個數字表示由大到小的5個盤子

int steps;

int hanoi_com(int n,int a[5],int b[5],int c[5]);

steps=hanoi_com(5,left,mid,right,0);

printf("left=[%d,%d,%d,%d,%d]\n",left[0],left[1],left[2],left[3],left[4]);

printf("mid=[%d,%d,%d,%d,%d]\n",mid[0],mid[1],mid[2],mid[3],mid[4]);

printf("right=[%d,%d,%d,%d,%d]\n",right[0],right[1],right[2],right[3],right[4]); //列印最終狀態

printf("steps=%d\n",steps); //列印結果

return 0;

}int hanoi_com(int n,int a[5],int b[5],int c[5])

aofe_a=i; //統計柱子a的空位數

i=0;

while(i<=4)

aofe_c=i; //統計柱子c的空位數

c[aofe_c-1]=a[aofe_a];

step=step+1;

a[aofe_a]=0; //進行一次變換並記錄

} //三步法

else

aofe_a=i;

i=0;

while(i<=4)

aofe_c=i;

c[aofe_c-1]=a[aofe_a];

step=step+1;

a[aofe_a]=0;

hanoi_com(n-1,b,a,c);

} return step;

}

經典漢諾塔問題通過簡單的遞迴法計算完成步數,本文以5個盤子為例,用陣列模擬漢諾塔問題實現的過程(c語言實現),思想還是傳統的「三步法」。 

以上**經過加工後還可實現對每一次變換的顯示,本文暫不貼出,如感興趣可自己嘗試。

漢諾塔 模擬

古老的漢諾塔問題是這樣的 用最少的步數將n個半徑互不相等的圓盤從1號柱利用2號柱全部移動到3號柱,在移動的過程中小盤要始終在 的上面。現在再加上乙個條件 不允許直接把盤從1號柱移動到3號柱,也不允許直接把盤從3號柱移動到1號柱。把盤按半徑從小到大用1到n編號。每種狀態用n個整數表示,第i個整數表示i...

漢諾塔問題II 模擬)

漢諾塔問題ii time limit 1 sec memory limit 64 mb submit 1556 solved 720 漢諾塔 又稱河內塔 問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片 圓盤。大梵天命令婆羅門把...

漢諾塔問題

問題 假設有3個分別命名為x,y,z的寶塔,在塔座x上插有n個直徑大小各不相同,從小到大編號為1,2,3。n的圓盤。現要求將x軸上的n個圓盤移至塔座z上 並仍然按同樣的順序疊排,圓盤移動時必須遵循下列規則 1.每次只能移動乙個圓盤 2.圓盤可以插在x,y和z中的任一塔座上 3.任何時刻都不能將乙個較...