一、算法思想
Hanoi问题是一个典型的用递归求解的问题,整个求解过程要有整体搬移的思想,利用递归程序实现即可。本算法实现实现将n个对象由A移动到B,具体可分为以下三步:
1)将前n-1个对象由A移动到C,B作为过渡柱子
2)将当前最大的第n个对象由A移动到B
3)将前n-1个对象由C移动B,A作为过渡柱子
二、代码实现
/*
实现将n个对象由A移动到B:
1)将n-1个对象由A移动到C
2)将n由A移动到B
3)将n-1个对象由C移动B
*/
#include<stdio.h>
void Hanoi(int n,char a,char b,char c);
void Move(int n,char from,char to);
int main()
{
int n=0;//汉诺塔的问题规模
char a='A';
char b='B';
char c='C';
scanf("%d",&n);
Hanoi(n,a,b,c);
return 0;
}
//Hanoi(n,from,to,by),借助c将n个盘由a移动到b
void Hanoi(int n,char a,char b,char c)
{
if(n==1)//递归出口
Move(n,a,b);
else
{
Hanoi(n-1,a,c,b);//Hanoi(n-1,from,to,by),借助b将n-1个盘由a移动到c
Move(n,a,b);//move(from,to),将最大盘由a移到b
Hanoi(n-1,c,b,a);//Hanoi(n-1,from,to,by),借助a将n-1个盘由c移回到b
}
}
void Move(int n,char from,char to)
{
printf("move%d:from%c to %c\n",n,from,to);//打印移动过程
}
三、测试结果