/********************************************************
FileName:hanoi.c
Author:Dong Xitian
Version:1
Function:汉诺(Hanoi)塔问题:古代有一个梵塔,塔内有三个座A、B、C,
A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图)。
有一个和尚想把这64个盘子从A座移到B座,但每次只能允许移动一个盘子,
并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。
在移动过程中可以利用B座,要求打印移动的步骤。
Date(Y/M/D):2011/11/23
*******************************************************/
#include <stdio.h>
int i = 0;
void Move(char chSour,char chDest)
{
// 打印移动步骤
i++;
printf("\n------->Move the top plate of %c to %c",chSour,chDest);
printf("\nThis is %d",i);
}
/******************************************************
Hanoi函数的第一个参数表示盘子的数量,第二个参数表示源座,
第三个参数表示借用的座,第四个参数代表目的座。
比如Hanoi(n-1,A,C,B)表示借助C座把n-1个盘子从A座移动到B座。
Move函数的第一个参数表示源座,第二个参数代表目的座。
Move函数的功能是将源座最上面的一个盘子移动到目的座上。
******************************************************/
Hanoi(int n,char chA,char chB,char chC)
{
if(n == 1)
{
Move(chA,chC);
//printf("\n%s","111111---->");
}else/*盘子数大于1,继续进行递归过程*/
{
Hanoi(n-1,chA,chC,chB);
Move(chA,chC);
Hanoi(n-1,chB,chA,chC);
}
}
int main(int argc, const char *argv[])
{
int n;
/*输入盘子数量*/
printf("Please Input number of the Plates: ");
scanf("%d",&n);
getchar();//回收回车
printf("Moving %d Plates from A to C:\n",n);
//调用函数计算,并打印输出结果
Hanoi(n,'A','B','C');
putchar('\n');
return 0;
}
汉诺塔问题 递归
最新推荐文章于 2024-04-20 19:46:01 发布