汉诺塔问题的递归解法与非递归解法(堆栈解法)
来源:互联网 发布:网络电视30天回看 编辑:程序博客网 时间:2024/06/10 04:15
1.递归算法,三步:移动n-1到b,移动1到c,移动n-1到c。
#include<iostream>using namespace std;int j = 1;void move(char a, char c){cout << j++ << " " << a << "--->" << c << endl;}void Hanio(int n,char a,char b,char c){if (n == 1){move(a, c);return;}Hanio(n - 1, a, c,b);move(a, c);Hanio(n - 1, b, a,c);}int main(){int n;cin >> n;cin.get();Hanio(n, 'a', 'b', 'c');cin.get();return 0;}2.非递归解法,使用堆栈主要是将问题分解为三个,从后向前压进堆栈,再依次解决#include<iostream>using namespace std;const int Maxsize = 100;typedef struct { //建立一个汉诺塔模型,n是盘个数,ABC是三个柱子int N;char A;char B;char C;}Mode;typedef struct {//建立一个堆栈Mode Data[Maxsize];int Top;}Stack;Mode ERROR;void Push(Stack * Ptr, Mode item)//压进堆栈{if (Ptr->Top == Maxsize - 1)return;else{Ptr->Data[++(Ptr->Top)] = item;return;}}Mode Pop(Stack * Ptr)//弹出堆栈{if (Ptr->Top == -1)return ERROR;else{Ptr->Top--;return Ptr->Data[Ptr->Top + 1];}}void Hanio(int n)//求汉诺塔解决子程序{Mode P, toPush;Stack S;P.N = n;//建立一个汉诺塔型 的结构体,n是盘数P.A = 'a';P.B = 'b';P.C = 'c';S.Top = -1;Push(&S, P);//(n,a,b,c)可以分解为三个问题(n-1,a,b,c)(2,a,b,c)(n-1,b,a,c),然后反着压进堆栈while (S.Top != -1)//看栈是不是空的{P = Pop(&S);if (P.N == 1)cout << P.A << "--->" << P.C;else{toPush.N = P.N - 1;toPush.A = P.B;toPush.B = P.A;toPush.C = P.C;Push(&S, toPush);toPush.N = 1;toPush.A = P.A;toPush.B = P.B;toPush.C = P.C;Push(&S, toPush);toPush.N = P.N - 1;toPush.A = P.A;toPush.B = P.C;toPush.C = P.B;Push(&S, toPush);}}}int main(){/*int n;cin >> n;*/Hanio(3);cin.get();return 0;}
阅读全文
0 0
- 汉诺塔问题的递归解法与非递归解法(堆栈解法)
- N皇后问题的递归与非递归解法
- 汉诺塔问题的递归解法
- 汉诺塔问题的递归解法
- 汉诺塔问题递归解法
- 汉诺塔问题递归解法
- 背包问题的非递归解法
- 八皇后问题的非递归解法
- 背包问题(非递归解法)
- 汉诺塔的递归解法
- 汉诺塔的递归解法
- N皇后问题递归与非递归解法
- Hanoi(汉诺)问题的非递归解法
- 背包非递归解法
- Fibonacci非递归解法
- 背包问题的递归和非递归的解法
- 背包问题的递归和非递归的解法
- 字符串反序函数的递归与非递归解法
- 你有一条linux命令学习之chown
- zsh 命令(一)
- 加速度傳感器 G-sensor 10-bit, 3軸, 數字輸出加速度傳感器-BMA253
- Android Lottie 使用以及源码解析
- Lustre安装-Lustre2.10.0 Client安装-CentOS/RHEL(原创)
- 汉诺塔问题的递归解法与非递归解法(堆栈解法)
- mysql数据类型
- Junit框架的学习与使用
- 铝电解电容的尺寸
- Spark性能优化指南——高级篇
- 无敌是多么多么寂寞【操作系统FIFO及LRU算法C语言实现】
- 机器学习常见算法
- node_modules
- CorelDraw 猴子绘制最详细的图解教程全部在这了