| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 758 人关注过本帖
标题:汉诺塔问题完全搞不懂
只看楼主 加入收藏
从一而终
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-11-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
汉诺塔问题完全搞不懂
汉诺塔
搜索更多相关主题的帖子: 完全 
2012-11-14 14:38
w527705090
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:441
专家分:1882
注 册:2011-6-28
收藏
得分:3 
百度递归法。。。你就能看到详细的解说。。。

有心者,千方百计;无心者,千难万难。
2012-11-14 14:44
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:3 
先自己玩玩,用少一点的

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2012-11-14 19:29
zxd543
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:内蒙古
等 级:贵宾
威 望:17
帖 子:453
专家分:2351
注 册:2012-4-12
收藏
得分:3 
记住递推公式就行了

马马虎虎 不吝赐教 我是路过蹭分滴
2012-11-14 21:59
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:3 
康辉的C视频教程里有专门的一节课48分钟时间讲汉诺塔的,很细,你在百度上找找吧。

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-11-14 22:04
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
好像是第14讲

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-11-15 12:15
xtjopt
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:89
专家分:168
注 册:2012-9-12
收藏
得分:3 
要想用程序做出汉诺塔的答案,
你必须先自己玩下汉诺塔,
会玩了,代表你有自己的想法了,差不多就可以做出来了

[ 本帖最后由 xtjopt 于 2012-11-15 14:18 编辑 ]
2012-11-15 14:02
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
收藏
得分:3 
我的理解:
1:你不必考虑每一步怎么搬,只考虑把n-1个搬完后,接下来你该怎么做,就是把最下边的搬到z上去。
2:然后接下来的工作是一样的,你只需考虑把n-2个从y搬到x后,然后该怎么做,就是把y剩下的一个搬到z上去。
3:其他的操作跟这个性质是一样的。你若果陷入了每一步该怎么做的话,还是没有理解递归的含义啊,他们是一系列性质相同的操作!

重要的不是结果,是求一个结果的过程,哪怕千难万难,当你有想要的结果时,你已走的很远
2012-11-15 17:06
youngdavid
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:698
注 册:2012-9-24
收藏
得分:3 
Hanoi塔问题, 算法分析如下,设A上有n个盘子。
如果n=1,则将圆盘从A直接移动到C。
如果n=2,则:
(1)将A上的n-1(等于1)个圆盘移到B上;
(2)再将A上的一个圆盘移到C上;
(3)最后将B上的n-1(等于1)个圆盘移到C上。
如果n=3,则:
A)将A上的n-1(等于2,令其为n`)个圆盘移到B(借助于C),步骤如下:
(1)将A上的n`-1(等于1)个圆盘移到C上。
(2)将A上的一个圆盘移到B。
(3)将C上的n`-1(等于1)个圆盘移到B。
B)将A上的一个圆盘移到C。
C)将B上的n-1(等于2,令其为n`)个圆盘移到C(借助A),步骤如下:
(1)将B上的n`-1(等于1)个圆盘移到A。
(2)将B上的一个盘子移到C。
(3)将A上的n`-1(等于1)个圆盘移到C。到此,完成了三个圆盘的移动过程。
从上面分析可以看出,当n大于等于2时, 移动的过程可分解为三个步骤:第一步 把A上的n-1个圆盘移到B上;第二步 把A上的一个圆盘移到C上;第三步 把B上的n-1个圆盘移到C上;其中第一步和第三步是类同的。 当n=3时,第一步和第三步又分解为类同的三步,即把n`-1个圆盘从一个针移到另一个针上,这里的n`=n-1。//摘自百度
2012-11-15 21:48
zxd543
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:内蒙古
等 级:贵宾
威 望:17
帖 子:453
专家分:2351
注 册:2012-4-12
收藏
得分:0 
C++写的简单汉诺塔
#include<iostream>
using namespace std;
int main()
{
    int n,i;
    __int64 a[40]={0,2};
    while(cin>>n)
    {
        for(i=2;i<=n;i++)
        {
            a[i]=(3*a[i-1])+2;
        }
    printf("%I64d\n",a[n]);
    }
    return 0;
}

马马虎虎 不吝赐教 我是路过蹭分滴
2012-11-15 22:03
快速回复:汉诺塔问题完全搞不懂
数据加载中...
 
   



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

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