非递归 汉诺塔问题 C实现方法
2013-10-08 22:51
281 查看
//帮同学重案组之虎做的 void move(int k,char from,char thru,char to); int atop,btop,ctop,count=0; int a[50],b[50],c[50]; void main() { int n,i; printf("输入盘子的个数:\n"); scanf("%d",&n); printf("--------工作流程--------\n"); for(i=0;i<n;i++){a[i]=i+1;} atop=n-1;btop=-1;ctop=-1; move(n,'A','B','C'); printf("------------------------\n"); printf("移动次数:---> %d \n",count); } void move(int k,char from,char thru,char to) { if(k>=1) { move(k-1,from,to,thru); count++; if(from=='A'&&to=='B') {printf(">>> %d---(%d) : %c ===> %c \n",count,a[atop],from,to); btop++;b[btop]=a[atop];atop--; } else if(from=='A'&&to=='C') {printf(">>> %d---(%d) : %c ===> %c \n",count,a[atop],from,to); ctop++;c[ctop]=a[atop];atop--; } else if(from=='B'&&to=='A') { printf(">>> %d---(%d) : %c ===> %c \n",count,b[btop],from,to); atop++;a[atop]=b[btop];btop--; } else if(from=='B'&&to=='C') { printf(">>> %d---(%d) : %c ===> %c \n",count,b[btop],from,to); ctop++;c[ctop]=b[btop];btop--; } else if(from=='C'&&to=='A') { printf(">>> %d---(%d) : %c ===> %c \n",count,c[ctop],from,to); atop++;a[atop]=c[ctop];ctop--; } else if(from=='C'&&to=='B') { printf(">>> %d---(%d) : %c ===> %c \n",count,c[ctop],from,to); btop++;b[btop]=c[ctop];ctop--; } move(k-1,thru,from,to); } }
相关文章推荐
- PHP递归实现汉诺塔问题的方法示例
- STL学习笔记:用非递归的方法实现汉诺塔问题
- 用递归法:设计算法求解汉诺塔问题,并编程实现。 (1) Hanoi(汉诺)塔问题分析 这是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有3个座 A,B,C
- 汉诺塔问题--递归实现
- 经典递归解决汉诺塔问题 python实现
- 汉诺塔问题--递归实现
- 递归实现汉诺塔问题
- 汉诺塔问题 Java 语言递归实现
- 汉诺塔问题的递归解决方法
- 汉诺塔问题具体解答递归方法
- 递归5--汉诺塔问题的栈实现
- java 递归实现汉诺塔问题
- 数据结构基础(6)--递归和函数调用--汉诺塔问题C语言实现
- 3行核心代码解决汉诺塔问题(C++递归实现)
- 汉诺塔问题的递归实现
- php实现汉诺塔问题(递归)
- 采用递归和非递归方法求解汉诺塔问题
- 用Python递归实现汉诺塔问题
- 汉诺塔问题的递归实现
- 分别使用一般递归的方法和模板元编程实现台阶问题。