[算法题] 汉诺塔问题

简介: 问题描述三个柱子,起初有若干个按大小关系顺序安放的盘子,需要全部移动到另外一个柱子上。移动规则:在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。移动次数: f(n)=2n -1 解法思路使用递归算法进行处理。
问题描述
三个柱子,起初有若干个按大小关系顺序安放的盘子,需要全部移动到另外一个柱子上。移动规则:在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
移动次数: 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

 

目录
相关文章
|
4月前
|
算法
|
1月前
递归求解汉诺塔问题(超详解)
递归求解汉诺塔问题(超详解)
|
9月前
1205:汉诺塔问题
1205:汉诺塔问题
|
9月前
汉诺塔问题
汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
44 0
|
7月前
递归经典例题——汉诺塔
递归经典例题——汉诺塔
78 1
|
9月前
|
C语言
汉诺塔问题(解出来了带你看洛丽塔)
汉诺塔问题(解出来了带你看洛丽塔)
114 0
|
10月前
|
Java C语言
【JavaOJ】汉诺塔问题
JavaOJ & 汉诺塔问题
54 0
|
算法
算法练习——(9)汉诺塔问题
一.传说: 二.数学问题: 三.递归算法:
113 0
|
C++
【C/C++】汉诺塔问题
## 汉诺塔问题相传来源于印度教的天神汉诺。据说汉诺在创造地球时建了一座神庙,神庙里面有三根柱子,汉诺将64个直径大小不同的盘子按照从大到小的顺序依次放置在第一个柱子上,形成金塔(即汉诺塔)。天神汉诺每天让庙里的僧侣们将第一根柱子上的64个盘子借助第二根柱子全部移动大第三根柱子上,并说:“当这64个盘子全部移动到第三根柱子上时,世界末日也就要到了!”这就是著名的汉诺塔问题。
113 0
【C/C++】汉诺塔问题