漢諾塔問題的遞迴解法與非遞迴解法(堆疊解法)

2021-08-10 18:15:20 字數 796 閱讀 1877

1.遞迴演算法,三步:移動n-1到b,移動1到c,移動n-1到c。
#includeusing namespace std;

int j = 1;

void move(char a, char c)

void hanio(int n,char a,char b,char c)

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

move(a, c);

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

}int main()

2.非遞迴解法,使用堆疊
主要是將問題分解為三個,從後向前壓進堆疊,再依次解決
#includeusing namespace std;

const int maxsize = 100;

typedef struct mode;

typedef struct stack;

mode error;

void push(stack * ptr, mode item) //壓進堆疊

}mode pop(stack * ptr) //彈出堆疊

}void hanio(int n) //求漢諾塔解決子程式 }}

int main()

漢諾塔遞迴及非遞迴解法

1.經典遞迴解法 include void mov char a,char b void recursive hanoi int n,char a,char b,char c int main 2.非遞迴解法 從漢諾塔的遞迴解法可以看出,它跟二叉樹中序遍歷遞迴解法是乙個道理。既然二叉樹非遞迴解法能寫...

漢諾塔遞迴解法

解題思路 1 當只有乙個圓盤時,只需將其從 塔a移至目標塔c 不需要借助輔助塔b 2 當有兩個圓盤時,需要先把1號圓盤移至輔助塔b,將2號圓盤移至目標塔c,再將輔助塔b上的1號圓盤移至目標塔c即可。3 當有三個圓盤時,需要先把1號 2號圓盤移至輔助塔b,將3號圓盤移至目標塔c,再將輔助塔b上的1號 ...

漢諾塔問題的遞迴解法

漢諾塔問題的遞迴解法 實現程式 include using namespace std void move int n,char i,char j void hanoi int n,char x,char y,char z int main 執行結果 以下是3層漢諾塔的解法 把1號從x移動到z 把2...