数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 3708|回复: 7

初学者,请教高手给看看

[复制链接]
发表于 2003-7-27 01:51:41 | 显示全部楼层 |阅读模式
这是一个关于汉诺塔的解法的程序,三根柱子分别用a,b,c代表,输入n表示盘子的个数.不知道这样为什么不行,大侠们给看看.3q先了

#include <stdio.h>

main()
{
int n;
printf("This is a game named HAN NO TA,\n");
printf("Now, pls insert ur number here:");
scanf("%d",&n);
printf("\nThe answer is : \n");
hnt(n,'a','b','c');
}
hnt(int n,char a,char b,char c)
{
switch(n)
        {
        case 1:printf("%c-->%c\n",a,c);break;
        case 2:printf("%c-->%c\n",a,b);
               printf("%c-->%c\n",a,c);
               printf("%c-->%c\n",b,c);break;
        default:hnt(n-1,'a','c','b');
                hnt(1,'a','b','c');
                hnt(n-1,'b','a','c');
        }
}
发表于 2003-7-27 02:24:08 | 显示全部楼层

看样子是从a移到c
那么可能是这样算吧(我没验证)


#include <stdio.h>

main()
{
int n;
printf("This is a game named HAN NO TA,\n");
printf("Now, pls insert ur number here:");
scanf("%d",&n);
printf("\nThe answer is : \n");
hnt(n,'a','b','c');
}

hnt(int n,char a,char b,char c)
{
if(n==1)
{
printf("%c-->%c\n",a,c)
}
else
{
hnt(n-1,'a','c','b');//先把上面的n-1个移到b
hnt(1,'a','b','c');//再把最下面一个移到c
hnt(n-1,'b','a','c');//再把那n-1个移到c
}
}
发表于 2003-7-27 02:25:03 | 显示全部楼层

楼主你上面的那一个case 2的情况,很可能是多余的
 楼主| 发表于 2003-7-27 04:46:36 | 显示全部楼层

谢了哈,重新做了,那个case 2 的确是多余,画蛇添足
还有,我原来那个是错在:

hnt(n-1,'a','c','b');
hnt(1,'a','b','c');
hnt(n-1,'b','a','c');

a,b,c通通多了''
 楼主| 发表于 2003-7-27 04:53:45 | 显示全部楼层

还有,这种方法来解汉诺塔是不是最少步的方法
如果是,那n层的汉诺塔至少要2^n-1步移动.

<A TARGET=_blank HREF="http://games.tom.com/Archive/1155/1182/2003/5/29-1440.html">http://games.tom.com/Archive/1155/1182/2003/5/29-1440.html</A>
发表于 2003-7-27 04:56:59 | 显示全部楼层

汉诺塔问题,递归调用,还可以想想用非递归调用
发表于 2003-7-27 07:42:32 | 显示全部楼层

是的,汉诺塔问题就是那么多步啊。
发表于 2003-7-28 02:14:55 | 显示全部楼层

void hanoi(int n,int a,int b,int c)
{if(n&gt;0)
   {hanoi(n-1,a,b,c);
    move(n,a,b);
    hanoi(n-1,c,b,a);
    }
}其中hanoi(n,a,b,c)表示将塔座a上至下而上,由的啊到小叠在一起的n个原盘依次移动到塔座b上并仍按照同样顺序叠陪.在移动过程中,以塔座 c作为辅助塔座.move(n,a,b)表示塔座a上编号为n的原盘移至塔座b上&gt;
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-5-5 05:32 , Processed in 0.049521 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表