如何制作一个用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。

汉诺塔问题也是编程中一个经典的递归问题。下面我们将给出递归和非递归的不同源代码。