C语言编程实现汉诺塔问题
1.首先解释一下,汉诺塔问题:古代梵塔内有A、B、C3个座,开始时A座上面有64个盘子,盘子大小不等,大的在下,小的在上。一个老和尚想把64个盘子从A移到C,规定移动过程中3个座上面始终保持大的在下,小的在上,且每次只能移动一个盘子。编程实现输出移动盘子的过程。
2.解题思路
(1)命令第2个和尚将上面63个盘子从A移到B;
(2)自己把最底下,最大的那个盘子从A移到C;
(3)再让第2个和尚把63个盘子从B移到C;
只需3步即完成,这中间蕴涵的就是递归思想。但是还有一个问题,怎么才能完成步骤(1)和(3)呢?看下面的3个步骤:
<1> 命令第3个和尚将上面62个盘子从A移到C;
<2> 自己把最底下,最大的那个盘子从A移到B;
<3> 再让第3个和尚把62个盘子从C移到B;
这就完成了步骤(1),步骤(3)的思路可类推。
C语言代码如下
#include<stdio.h>
int main()
{void hanoi(int n,char one ,char two ,char three );int n;scanf("%d",&n);hanoi(n ,'A' ,'B' ,'C' );return 0 ;
}//将n个盘子借助two,从one移到three
void hanoi(int n,char one ,char two ,char three ) //定义汉诺塔函数
{void move (char one ,char two );if (n == 1)move(one,three);else {hanoi(n-1,one ,three ,two);move(one,three);hanoi(n-1,two ,one ,three );}
}
void move (char x ,char y ) //定义move函数,打印移动的过程
{printf("%c -> %c\n",x ,y );
}