一、算法思想
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);//打印移动过程 }三、测试结果