博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[算法题] 汉诺塔问题
阅读量:7096 次
发布时间:2019-06-28

本文共 844 字,大约阅读时间需要 2 分钟。

问题描述

三个柱子,起初有若干个按大小关系顺序安放的盘子,需要全部移动到另外一个柱子上。移动规则:在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
移动次数: f(n)=2n -1

 

解法思路

使用递归算法进行处理。

 

汉诺塔的算法大概有3个步骤:

(1)把a上的n-1个盘通过c移动到b。

(2)把a上的最下面的盘移到c。

(3)因为n-1个盘全在b上了,所以把b当做a重复以上步骤就好了。

在网上找到一个3阶的汉诺塔递归过程示意图,参考一下。

 

 

 

 

代码实现

 

代码

#include <stdio.h>
int step = 
0;
void hanoi(
int n, 
char start, 
char assist, 
char end){
    
if(n>=
1){
        hanoi(n-
1, start, end, assist);
        printf(
"
move %d from %c --> %c \n
", n, start, end);
        step++;
        hanoi(n-
1, assist, start, end);
    }
}
int main(){
    
int n;
    scanf(
"
%d
", &n);
    hanoi(n, 
'
A
'
'
B
'
'
C
');
    printf(
"
Totally move %d steps\n
", step);
    
return 
0;
}

 

运行结果

Please input the disk num:
3
move 1 from A --> C
move 2 from A --> B
move 1 from C --> B
move 3 from A --> C
move 1 from B --> A
move 2 from B --> C
move 1 from A --> C
Totally move 7 steps

 

转载于:https://www.cnblogs.com/jingmoxukong/p/4359185.html

你可能感兴趣的文章
解析函數論 Page 29 命題(3) 模的下界的可達性
查看>>
windows异常调用顺序
查看>>
红黑树
查看>>
Sass
查看>>
Objective-C中Block语法、Block使用以及通过Block实现数组排序
查看>>
[转载]从业务运维转到产品经理,我摸爬滚打的产品之路
查看>>
比较正在使用的域名 和顶层窗口的域名
查看>>
Gitlab - Mac本机访问VirtualBox上搭建的Gitlab
查看>>
Bootstrap的Model源码详细注释 (转)
查看>>
java采用jxl写入一个Excel文件
查看>>
1171:大整数的因子
查看>>
传说中的数据结构 栈
查看>>
结对-结对编项目作业名称-设计文档
查看>>
Cesium 获取当前视图范围
查看>>
javascript基础
查看>>
加快普及智能家居DIY功能更受青睐
查看>>
python成长之路八 -- 内置函数
查看>>
【框架学习与探究之定时器--Quartz.Net 】
查看>>
Date 与 SimpleDateFormat
查看>>
C++ 11 创建和使用 unique_ptr
查看>>