C語言 N階漢諾塔問題的遞迴實現

2021-06-16 08:08:59 字數 1795 閱讀 2901

//遞迴實現模擬漢諾塔

#include #define ok 1

#define error 0

#define true 1

#define false 0

#define order 3 //漢諾塔階數

typedef int status;//函式執行狀態

typedef structtowerfoot;

void inithanoi(towerfoot *x,towerfoot *y,towerfoot *z,int n);

//漢諾塔初始化,x,y,z,漢諾塔階數為n

status find(const towerfoot *x,int id);

//檢驗編號為id的圓盤是否在塔座x上,是返回true;否則返回false

status check(const towerfoot *x);

//監測towerfoot是否排放正確

void move(towerfoot *x,int id,towerfoot *z);

//以y為輔助塔基,將編號為id的圓盤從塔座x移到塔座z

void hanoi(towerfoot *x,towerfoot *y,towerfoot *z,int n);

//將塔座x上的編號為1到n的圓盤按規則移到塔座z上

void printhanoi(const towerfoot *x,const towerfoot *y,const towerfoot *z,int n);

//列印漢諾塔三個塔座x,y,z上的圓盤

void printtower(const towerfoot *x);

//輸出當個漢諾塔塔座上的圓盤序號

int step=0;//全域性變數,記錄移動步數

int main()

void inithanoi(towerfoot *x,towerfoot *y,towerfoot *z,int n)

for(i=0;idisk[i]=i+1;

}}void hanoi(towerfoot *x,towerfoot *y,towerfoot *z,int n)

else

}void move(towerfoot *x,int id,towerfoot *z)

if(x->disk[0]!=id)

for(i=0;icount-1;i++)

for(i=z->count-1;i>=0;i--)

z->disk[0]=id;

x->count--;

z->count++;

step++; //每移動一次,步數加1

}status find(const towerfoot *x,int id)

return false;

}status check(const towerfoot *x)

return true;

}void printhanoi(const towerfoot *x,const towerfoot *y,const towerfoot *z,int n)else

if((n-y->count<=i)&&(j-n>0)&&(y->disk[i-(n-y->count)]>=j-n))else

if((n-z->count<=i)&&(j-2*n>0)&&(z->disk[i-(n-z->count)]>=j-2*n))else

}printf("\n");

}}void printtower(const towerfoot *x)

printf("\n");

}

執行結果演示:

n階漢諾塔的遞迴演算法

c語言編寫的一小段 include void hanoi int n,char a,char b,char c int main void hanoi int n,char a,char b,char c 執行結果 環境為codeblocks 演算法分析 1 先考慮乙個盤子的情況,再考慮2個盤子的情...

C語言遞迴實現漢諾塔問題

剛剛學習漢諾塔問題想要快速上手的話也可以理解為由三個柱構成 具體到函式裡下面的注釋裡有寫。在使用遞迴前我們首先要知道什麼是遞迴 程式呼叫自身的程式設計技巧稱為遞迴 recursion 遞迴的作用 遞迴做為一種演算法在程式語言中廣泛應用。乙個過程或函式在其定義或說明中有直接或間接呼叫自身的一種方法,它...

C語言遞迴 (漢諾塔問題)

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