汉诺塔问题
来源:互联网 发布:淘宝店仓库管理 编辑:程序博客网 时间:2024/06/07 12:50
有三根针A,B,C,A针上有n个盘子,盘子大小不等,大的在下,小的在上,如下图所示:
要求把这n个盘子从A针移动到c针,在移动的过程中可以借助B针,每次只允许移动一个盘,且在移动的过程中在三根针上都保持大盘在下,小盘在上。
分析:将n个盘子从A针移动到C针可以分解为下面三个步骤。
1,将A上n-1个盘子移动到B 针上(借助C针)。
2,把A针上剩下的一个盘子移动到C针上。
3,将n-1个盘子从B针移动到C针上(借助A针)
事实上,上面的三个步骤包含下面的两种操作。
a,将多个盘子从一个针移动到另一个针上,这是一个递归的过程
b, 将一个盘子从一个针上移动到另外一个针上。
实现程序:
#include<iostream>using namespace std;void move(char src,char dest)//把src针上最上面的一个盘子移动到dest针上{cout<<src<<"-->"<<dest<<endl;}void hanoi(int n,char src,char medium,char dest)//把n个盘子从src针移动到dest针,以medium针作为中介{if(n==1)move(src,dest);else{hanoi(n-1,src,dest,medium);move(src,dest);hanoi(n-1,medium,src,dest);}}int main(){int m;cout<<"Enter the number of diskes:"<<endl;cin>>m;cout<<"the steps to moving "<<m<<"diskes"<<endl;hanoi(m,'A','B','C');return 0;}
运行:
以上例程来自:何方舟老师的《c++程序设计》
- 汉诺塔问题 背包问题
- 递归问题,汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题.
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- EM算法
- 装机时遇到的英语
- 使用HttpClient进行资源下载和压缩,提供终端版本和web版本实现
- Objective-C内存管理教程和原理剖析
- 如何使用Core Text计算一段文本绘制在屏幕上之后的高度
- 汉诺塔问题
- 基于内存数据库的分布式数据库架构
- Steps to install JDK7 on Redhat Enterprise 5
- 关于Apache CXF
- 程序员编程标准
- zend studio不能打开remote file
- command模式--java实现 (将军发出指令示例)
- yum安装
- 使用jatoolsPrinter打印页面后通过window.close()出现的一个问题