c语言经典问题:汉诺塔 Hanoi问题
来源:互联网 发布:软件设计师培训学校 编辑:程序博客网 时间:2024/04/29 11:19
问题:
三根柱子A,B,C.其中A上有n个直径递增的圆盘(最顶为最小,然后往下一次增大),现在要把A上的n个圆盘移到C上,要求每次移动一个,不允许出现任何大的圆盘叠放在小的圆盘上,柱B可作中转用。求移动步骤。
这个问题使用递归思想是比较靠谱的,能大大降低难度。c语言代码如下:
// Created by zyb on 14-6-23.
// All rights reserved.
#include <stdio.h>
void m(int n,char x,char y,char z);//声明函数m,函数的四个参数中,n代表汉诺塔的层数,x、y、z代表从将n层汉诺塔从x移动到z,y为中间介质。
void m(int n,char x,char y,char z){
if (n==1) { //如果只有一个需要移动,直接输出
printf("%c-->%c\n",x,z);
}
else{ //如果有n>1个需要从x移动z,将x最上面的n-1个移动到y,将最后一个移动到z,最后利用递归。将y上面的n-1个移动到z。
m(n-1,x, z, y);
printf("%c-->%c\n",x,z);
m(n-1, y,x,z);
}
}
int main(){
int n=0;
printf("请输入汉诺塔的层数:");
scanf("%d",&n);
m(n, 'A', 'B', 'C');
}
运行,输入6,结果如下:
请输入汉诺塔的层数:6
A-->B
A-->C
B-->C
A-->B
C-->A
C-->B
A-->B
A-->C
B-->C
B-->A
C-->A
B-->C
A-->B
A-->C
B-->C
A-->B
C-->A
C-->B
A-->B
C-->A
B-->C
B-->A
C-->A
C-->B
A-->B
A-->C
B-->C
A-->B
C-->A
C-->B
A-->B
A-->C
B-->C
B-->A
C-->A
B-->C
A-->B
A-->C
B-->C
B-->A
C-->A
C-->B
A-->B
C-->A
B-->C
B-->A
C-->A
B-->C
A-->B
A-->C
B-->C
A-->B
C-->A
C-->B
A-->B
A-->C
B-->C
B-->A
C-->A
B-->C
A-->B
A-->C
B-->C
- c语言经典问题:汉诺塔 Hanoi问题
- 经典问题-汉诺塔(hanoi)
- 经典Hanoi问题
- 学习C/C++语言:递归求解hanoi汉诺塔问题
- Hanoi塔问题(C)
- Hanoi塔问题_经典
- Hanoi塔问题 栈与递归C语言编程实现
- 1、一日一程序之C语言的Hanoi问题
- 用C语言解决(hanoi)汉诺塔问题——函数的递归调用
- Hanoi--汉诺塔问题
- Hanoi汉诺塔问题
- Hanoi汉诺塔 问题
- Hanoi(汉诺塔问题)
- Hanoi(汉诺塔)问题。
- Hanoi汉诺塔问题
- Hanoi(汉诺塔)问题
- hanoi(汉诺塔)问题
- Hanoi汉诺塔问题
- Windows如何打包Qt程序
- Qt编码问题
- <meta name="robots" content="INDEX,FOLLOW">的含义 seo
- oracle导出导入
- ArcGIS Engine开发入门教程
- c语言经典问题:汉诺塔 Hanoi问题
- Action层, Service层 ,modle层 和 Dao层的功能区分
- 从1.5k到18k, 一个程序员的5年成长之路
- OJ 1.H
- 函数指针
- sprite是可以在在上级容器之间中移动--来自make thing move 一书
- iOS7 增加了新方法 可以检测从屏幕边沿的滑动
- 专访雷果国:从1.5K到18K 一个程序员的5年成长之路
- java学习网站大全