#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.任何時刻都不能將乙個較...