| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 404 人关注过本帖
标题:【小白问题】 汉诺塔问题代码 求帮助理解 求释疑。
只看楼主 加入收藏
tt7721
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:60
专家分:107
注 册:2011-8-7
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
【小白问题】 汉诺塔问题代码 求帮助理解 求释疑。
这是从书上Copy来的代码
程序代码:
#include <stdio.h>
int main()
{
    void hanoi(int n,char one,char two,char three);
    int m;
    printf("inputs the number of diskes:");
    scanf("%d",&m);
    printf("The steps to moveing %d diskes:\n",m);
    hanoi(m,'A','B','C');
}
void hanoi(int n,char one,char two,char three)
{
    void move(char x,char y);
    if (n==1)
        move(one,three);
    else
    {
        hanoi(n-1,one,three,two);
        move(one,three);
        hanoi(n-1,two,one,three);
    }
}
void move(char x,char y)
    {
        printf("%c-->%c\n",x,y);
    }


整个自定义函数hanoi这一段,else后面的部分不大懂。我笨。求高手们用最通俗的说法给俺讲下。谢谢、
2012-02-03 20:42
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
收藏
得分:10 
if是判断当前块的,else的意思是当前块不是第一块,也就是说上面肯定还放着其它块,为了移动就要先把上面的移走,然后自己移到指定位置,再把之前的移回来,腾出位置

酱油实习生
2012-02-03 20:48
tt7721
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:60
专家分:107
注 册:2011-8-7
收藏
得分:0 
回复 2楼 墨清扬
        hanoi(n-1,one,three,two);
        move(one,three);
        hanoi(n-1,two,one,three);
这三句话  具体什么意思啊。然后又是怎么样执行的
2012-02-03 20:50
itma
Rank: 4
等 级:业余侠客
帖 子:105
专家分:266
注 册:2010-2-8
收藏
得分:10 
比如A,B,C三个柱子
n=1时,直接把A上的移动到C上
n>1时,三步:
①用C做过渡,将A柱上的n-1个盘子移动到B柱上。
②将A上的最后一个盘子放到C柱上
③用A柱做过渡,将B柱上的n-1个盘子移动到C柱上
这样移动n个盘子的汉诺塔问题就变成了移动n-1个盘子的汉诺塔问题了,以此类推。
2012-02-03 22:02
快速回复:【小白问题】 汉诺塔问题代码 求帮助理解 求释疑。
数据加载中...
 
   



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

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