汉诺塔

来源:互联网 发布:html嵌入php 编辑:程序博客网 时间:2024/06/09 18:14

汉诺塔


Problem Description

汉诺塔(又称河内塔)问题是印度的一个古老的传说。
开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒A、B和C,A上面套着n个圆的金片,最大的一个在底下,其余一个比一个小,依次叠上去,庙里的众僧不倦地把它们一个个地从A棒搬到C棒上,规定可利用中间的一根B棒作为帮助,但每次只能搬一个,而且大的不能放在小的上面。

僧侣们搬得汗流满面,可惜当n很大时这辈子恐怕就很搬完了。

聪明的你还有计算机帮你完成,你能写一个程序帮助僧侣们完成这辈子的夙愿吗?
Input

输入金片的个数n。这里的n<=10。

Output

输出搬动金片的全过程。格式见样例。

Example Input

2

Example Output

Move disk 1 from A to BMove disk 2 from A to CMove disk 1 from B to C

Hint

可以用递归算法实现。


体会:
刚开始做这题的时候没有头绪,不敢做,放置了很久才重新来审视这个题。上网找视频,看着视频把代码敲出来,然后再细细体会,删掉代码自己独立又推敲了一次,这才把网上老师讲的话体会到!!
我想这就是进步——避开你的安逸区,做你怕的事情。


代码如下:

#include<stdio.h>void Move(int n, char a, char b){    printf("Move disk %d from %c to %c\n", n, a, b);}void Hanoi(int n, char a, char b, char c)//将第n号圆盘借助于c从a移到b上{    if (n == 1)        Move(n, a, b);    if (n > 1)    {        Hanoi(n - 1, a, c, b);        Move(n, a, b);        Hanoi(n - 1, c, b, a);    }}int main(){    int n;    scanf("%d", &n);    Hanoi(n, 'A', 'C', 'B');    return 0;}/***************************************************User name: ***Result: AcceptedTake time: 0msTake Memory: 160KBSubmit time: 2017-06-04 21:01:36****************************************************/