递归法解决Hanoi塔问题

来源:互联网 发布:网络利大于弊辩论词 编辑:程序博客网 时间:2024/04/28 19:52
解题思路:
要移动n个盘子,可以定义一个函数:mov (n,a,b,c),其中字符变量a,b,c分别表示A,B,C三个塔,函数mov(n,a,b,c)表示将n个盘子从A塔(借助B塔)移动到C塔。则这个问题可以使用递归调用方法解决。在n>0的前提下,函数mov(n,a,b,c)通过下列两步实现移动
1.mov(n-1,a,c,b)即将n-1个盘子从A塔(借助C塔)移动到B塔。目的是让A塔上的第n个盘子(最下面的盘子)上无其他盘子
2.将底下的第n个盘子从A塔移动到C塔

3.mov(n-1,b,a,c)即将n-1个叠在B塔上的盘子(借助于A塔)移动到C塔


#include <stdio.h>int step=0;void mov(int n,char a,char b,char c);int main(){int n;scanf("%d",&n);printf("n=%d\n",n);mov(n,'a','b','c');return 0;}void mov (int n,char a,char b,char c){if(n>0){mov(n-1,a,c,b);step++;printf("Step %d:%c--->%c\n",step,a,c);mov(n-1,b,a,c);}}


原创粉丝点击