汉诺塔递归问题
2016-03-23 21:22
489 查看
将n个盘子从A座移到C座。
过程:
(1)将n-1个盘子借助C座移到B座;
(2)将第n个盘子从A座移到C座;
(3)将B座上的n-1个盘子借助A座移动C座。
#include <iostream>
int i=0;
void move(int n,char from,char to)
{
i++;
cout<<"第"<<i<<"步: 将第"<<n<<"个盘子从"<<from<<"移动到"<<to<<endl;
}
void f(int n,char from,char mid,char to)
{
if(n==1)
move(1,from,to);
else{
f(n-1,from,to,mid); //将n-1个盘子借助C从A移到B
move(n,from,to); //将第n个盘子从A移到C
f(n-1,mid,from,to); //将n-1个盘子借助A从B移到C
}
}
int main()
{
int n;
cin>>n;
f(n,'A','B','C');
return 0;
}
![](https://img-blog.csdn.net/20160323212036560?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
大三考研狗现在才搞懂汉诺塔,我怎么不吃屎呢
过程:
(1)将n-1个盘子借助C座移到B座;
(2)将第n个盘子从A座移到C座;
(3)将B座上的n-1个盘子借助A座移动C座。
#include <iostream>
int i=0;
void move(int n,char from,char to)
{
i++;
cout<<"第"<<i<<"步: 将第"<<n<<"个盘子从"<<from<<"移动到"<<to<<endl;
}
void f(int n,char from,char mid,char to)
{
if(n==1)
move(1,from,to);
else{
f(n-1,from,to,mid); //将n-1个盘子借助C从A移到B
move(n,from,to); //将第n个盘子从A移到C
f(n-1,mid,from,to); //将n-1个盘子借助A从B移到C
}
}
int main()
{
int n;
cin>>n;
f(n,'A','B','C');
return 0;
}
大三考研狗现在才搞懂汉诺塔,我怎么不吃屎呢
相关文章推荐
- C语言实现AVL-平衡二叉树
- 代码规范_5:c++ _代码规范
- Libgdx 坐标系
- Leetcode 136 137 260 SingleNumber I II III
- 软件工程作业单词统计
- 分析system_call中断处理过程
- 结对项目的感受
- Deep learning:(龙星计划2013深度学习课程小总结)
- 动态规划算法
- 使用Idea创建ssm项目,SpringMVC+Spring+MyBatis+Maven整合
- 详解 Redis 应用场景及应用实例
- 云计算时代的到来
- CocoaPods安装和使用教程
- leetcode——257——Binary Tree Paths
- 重置已分配未执行的任务(300,400-》200)
- 第三次作业
- 3月23.CSS表格布局
- HTTP状态码大全(转自wiki)
- 《笑傲江湖曲》所感
- hdu1058 Humble Numbers--DP