用C語言棧的方式求解漢諾塔遊戲

2021-06-19 16:44:12 字數 1136 閱讀 7086

漢諾塔:漢諾塔(又稱河內塔)問題是源於印度乙個古老傳說的益智玩具。

大梵天創造世界的時候做了三根

金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片**圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動乙個圓盤。

下面是我用c語言實現的源**:

#include

#include

#include

typedef int datatype;

#define max 100

typedef struct node

stack_node,*stack_link;

bool init(stack_link *l)   //初始化

bool empty(stack_link l)

bool overflow(stack_link l)

bool push(stack_link l,datatype n)

else }

bool pop(stack_link l,datatype m)

else 

}/*移動函式  ,把編號為x的盤從p移動至q*/

bool move(int x,stack_link p,stack_link q) 

else 

}/*列印移動過程函式*/

int j=1;

void move_print(int n,char x,char y)

/*遞迴移動函式*/

void hanoi(int n,stack_link x,stack_link y,stack_link z)

}/*遞迴列印移動過程函式*/

void hanoi_move_print(int n,char x,char y,char z)

int main(void)

for(i=0;itop,y->top,z->top);

printf("the move step:\n");

hanoi(n,x,y,z);

hanoi_move_print(n,a,b,c);

printf("x:%d\ty:%d\tz:%d\n",x->top,y->top,z->top);

return 0;}

用棧來求解漢諾塔問題

漢諾塔問題比較經典,這裡修改一下遊戲規則 現在限制不能從最左側的塔直接移動到最右側,也不能從最右側直接移動到最左側,而是必須經過中間。求當塔有n層的時候,列印最優移動過程和最優移動總步數。輸入描述 輸入乙個數n,表示塔層數 輸出描述 按樣例格式輸出最優移動過程和最優移動總步數 示例1輸入2輸出mov...

用棧來求解漢諾塔問題

說明 本文是左程雲老師所著的 程式設計師面試 指南 第一章中 用棧來實現漢諾塔問題 這一題目的c 棧方法的復現。感謝左程雲老師的支援。題目 漢諾塔問題比較經典,這裡修改一下遊戲規則 現在限制不能從最左側的塔直接移動到最右側,也不能從最右側直接移動到最左側,而必須經過中間。求當有n層塔的時候,列印最優...

棧的應用 漢諾塔遊戲

他作為乙個理科生是嚴謹的,他認為天才與否,取決於最終達到的高度。一些事情不過比別人早幾年做到,算不上什麼天才。樓天成 棧 stack 它的結構為lifo last in first out 後進先出。如圖所示 漢諾塔 漢諾塔 又稱河內塔 問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了...