一、汉诺塔
汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。由A,B,C三根柱子与n个圆盘组成,通过每次移动一个圆盘将A柱子上的圆盘移动到C柱子上。
当n=1时,移动方式:A->C
当n=2时,移动方式:A->B,A->C,B->C
当n=3时,移动方式:A->C,A->B,C->B,A->C,B->A,B->C,A->C
二、代码分析
1.用代码模拟移动,当圆盘从起始位置通过中转位置移动到结束位置,就是一轮汉诺塔游戏。定义move函数模拟圆盘的移动,设置参数起始位置a和结束位置c
void move(char a,char c)
{
printf(" %c->%c ",a,c);
}
2.创建汉诺塔游戏函数,当圆盘数量为1时,起始位置就是A结束位置就是C。当圆盘数量大于1时,就需要中转位置B,将n-1个圆盘移到中转位置B,第n个圆盘通过移动函数只需从起始位置A到结束位置C,剩下的圆盘中n-1个圆盘起始位置是B中转位置则是A结束位置是C。
void Han(int n,char a,char b,char c)
{ if(n == 1)
{
move(a,c);
}
else
{
Han(n-1,a,c,b);
move(a,b);
Han(n-1,b,a,c);
}
}
三、完整代码
#include <stdio.h>
void move(char a,char c)
{
printf(" %c->%c ",a,c);
}
void Han(int n,char a,char b,char c)
{
if(n == 1)
{
move(a,c);
}
else
{
Han(n-1,a,c,b);
move(a,c);
Han(n-1,b,a,c);
}
}
int main(){
int n;
printf("请输入盘子的个数:\n");
scanf("%d",&n);
printf("移动方式:\n");
Han(n,'A','B','C');
return 0;
}
完整代码可直接使用,使用DEV软件无报错