| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1499 人关注过本帖
标题:Hanoi塔问题在c语言中的详细解答
只看楼主 加入收藏
yang0401
Rank: 2
等 级:论坛游民
帖 子:84
专家分:57
注 册:2011-5-23
结帖率:69.23%
收藏
已结贴  问题点数:30 回复次数:4 
Hanoi塔问题在c语言中的详细解答
我看了Hanoi塔的c源代码,但是看不太明白有点绕,求高手详细的解答!
搜索更多相关主题的帖子: 源代码 c语言 
2011-06-02 23:19
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:30 
不知道你看的代码是怎样写的

#include <stdio.h>

void hanoi(unsigned int i, char a, char b, char c)
{
    if (i == 1)
    {//移动一次由a直接到c
        printf("%c -> %c\n", a, c);
    }
    else
    {
        hanoi(i-1, a, c, b);//a借助c把i-1个运到b
        printf("%c -> %c\n", a, c);//把a直接搬到c

        hanoi(i-1, b, a, c);
    }
}

int main(void)
{
    hanoi(3, 'A', 'B', 'C');

    return 0;
}
个人感觉最难理解的部分就是红色标记的那些 然后再加上 蓝色的部分 就更加的混啦因为可能会错误的理解它们
        hanoi(i-1, a, c, b);
        printf("%c -> %c\n", a, c);
        hanoi(i-1, b, a, c);
当把这三句写在一起的时候 难道不会认为第一和第三句表达的是同样意思吗,这点如同看二叉树的中序遍历一般。如果这样子理解可能会增加你理解程序的难度,其实形式差不多 但是表达的意思完全的不同,只是在实现功能模块上有共同点。

其实从递归的特性不难发现红色标记的其实是处理第i层 而蓝色标记的则是进入到i的下一层第i-1层进行条件递归


[ 本帖最后由 寒风中的细雨 于 2011-6-4 18:28 编辑 ]
2011-06-04 12:38
wengpingzhan
Rank: 2
等 级:论坛游民
帖 子:9
专家分:13
注 册:2011-6-12
收藏
得分:0 
hanoi(i-1, a, c, b);//a借助c把i-1个运到b
。。。。。
 hanoi(i-1, b, a, c);

 的确就是这2句不太好理解。
 其实意思就是把i-1先挪到中间一个塔,然后再把i-1从中间塔移动目标塔。
 
2011-06-12 17:23
weiqiang
Rank: 2
等 级:论坛游民
帖 子:48
专家分:52
注 册:2010-10-18
收藏
得分:0 
其实按我的理解,汉诺塔就是这么个意思:有n个盘子你首先需要借助C柱子把上面的n-1个移到B长,这样最后一个可以移到C上,然后就要借助A把B上的n-1个盘子移到C上。反正我是这么理解的。
2011-06-15 13:21
贫僧热爱编程
Rank: 1
等 级:新手上路
帖 子:4
专家分:1
注 册:2011-7-22
收藏
得分:0 
只要轮流进行两步操作就可以实现
我是这么理解的:
假设有三个柱子分别编号为A、B、C。将柱子按照“品”字形按顺序排开,将所有的n个圆盘按照从大到小顺序放在柱子A上。然后再根据圆盘的个数来确定柱子的排放顺序:若n为偶数,按顺时针方向依次摆放到A、B、C上。若是奇数,则按逆时针顺序摆放到A、C、B上。拿些实物来研究这个汉诺塔还是很容易的。

①按照顺时针方向把圆盘1从现在的柱子移动到下一个柱子,即当n的个数为偶数的时候,若圆盘1在柱子A则把他移动到B;若圆盘1在柱子B则把它移动到柱子C,若圆盘1在柱子C则把它移动到A
②接着把另外两根柱子上可以移动的圆盘移动到新的柱子上。即把非空的柱子上得圆盘移动到空柱子上,当两根柱子都非空的时候,移动较小的圆盘。
③反复进行前两步操作。
先把算法弄明白,然后再对应的去看代码,效果会好一些。希望能帮助到你。语言不是很精练。。。

论坛是一群有一定基础的人们讨论问题的地方,不是我这种菜鸟能玩的起的。
2011-07-22 23:30
快速回复:Hanoi塔问题在c语言中的详细解答
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.063994 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved