c语言汉诺Hanoi塔

题目要求:

一块板上有三根针,A,B,C。A针上套有64个大小不等的圆盘,大的在下,小的在上。如下图所示。要把这64个圆盘从A针移动C针上,每次只能移动一个圆盘,移动可以借助B针进行。但在任何时候,任何针上的圆盘都必须保持大盘在下,小盘在上。求移动的步骤。

这是一道非常经典的数学题和程序算法题,上学期间老师讲解数学归纳法,通过等比数列可行运行次数的规律是-1。若我们用编程的方式去解决汉诺塔,采用递归算法完成,并且记录执行的顺序,请看如下代码。


c语言汉诺Hanoi塔

Hanoi塔示意图

#include 
#include 
static unsigned long number=0;//搬运次数

move(int n,char x,char y,char z)
{
    if(n==1)
	{ 
	  number++;
      printf("%c-->%c
",x,z); 
	}
    else
    {
      move(n-1,x,z,y);  //  A C B
	  printf("%c-->%c
",x,z);
      move(n-1,y,x,z); // B A C
	  number++;
    }
}
int main(void) 
{ 
    int n;
	unsigned long sum;
    printf("input diskes number:
");
    scanf("%d",&n);						/*输入盘子数目n*/
    printf("The step to moving %d diskes:
",n);
    move(n,'A','B','C');				/*递归调用move(),求解盘子的搬运过程*/
	printf("Handling times=%d\r
",number);//搬移次数
	//printf("n=%d
",n);
	sum=pow(2,n)-1;
	printf("Handling times=%d\r
",sum);//搬移次数
    getche();
    return 0;
}

运行结果:

c语言汉诺Hanoi塔

运行结果

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章