如何制作一个用C语言编程的河内游戏?有源代码。
# include & ltstdio.h & gt
空移动(字符x,字符y)
{
printf(" % c-& gt;%c\n ",x,y);
}
void hanoi(int n,char 1,char 2,char 3)
{
if(n==1) move(一,三);
其他
{
河内(n-1,一,三,二);
动(一,三);
河内(n-1,二,一,三);
}
}
主()
{
int m;
printf("输入磁盘数量:");
scanf("%d ",& ampm);
printf("移动%3d磁盘的步骤:\n ",m);
河内(m,' A ',' B ',' C ');
}
算法介绍:
其实算法很简单。当板数为n时,移动次数应该等于2n–1(有兴趣可以自己证明)。后来,一位美国学者发现了一种出乎意料的简单方法,只需要依次两步。首先将三列按顺序排列成成品字体,将所有圆盘按降序放在A列上,根据圆盘数量确定列排列顺序:若n为偶数,A B C;顺时针放置;
如果n是奇数,顺时针依次放A C B。
(1)将圆盘1从当前列顺时针移动到下一列,即当n为偶数时,若圆盘1在A列,则移动到B列;如果磁盘1在B列,则将其移动到C;如果光盘1在C列,则将其移动到A..
(2)然后,将另外两列上的可移动磁盘移动到新列。即,将非空列上的光盘移动到空列,当两列都不为空时,移动较小的光盘。此步骤不指定要移动哪个磁盘。你可能觉得有很多可能,其实不是,唯一能实施的行动就是。
(3)重复(1)(2)的操作,最终按照规定完成河内塔的移动。
所以结果很简单,就是按照移动规则把金块往一个方向移动:
如河内三阶塔的运动:A → C,A → B,C → B,A → C,B → A,B→A,B → C,A → C。
汉诺塔问题也是编程中一个经典的递归问题。下面我们将给出递归和非递归的不同源代码。