码迷,mamicode.com
首页 > 编程语言 > 详细

关于C语言解决汉诺塔(hanoi)问题

时间:2020-06-04 22:00:39      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:bsp   else   nbsp   font   来源   印度   多少   mil   声明   

  C语言解决汉诺塔问题

汉诺塔是典型的递归调用问题:

hanoi简介:印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。

 技术图片

--图片来源于百度百科

 

A,B,C三个柱子,当A柱子上只有一个盘子时直接将该盘子从A柱子移到C柱子上,当A柱子上有n个盘子时,先借助C柱子将n-1移到B柱子上,然后把最后一个从A柱子移到C柱子上,其次把n-1个盘子借助A柱子从B柱子移到C柱子,那么就是三步。

大事化小,小事化了:分三步走

1.把A柱子上的n-1个盘子借助C柱子移到B柱子上

2.然后把最后一个盘子从A柱子直接移到C柱子

3.再然后把B柱子上的n-1个盘子借助A柱子移到C柱子上

代码如下:

#include<stdio.h>
void hanoi(int n,char a,char b ,char c); //声明hanoi函数
int main()
{
    int n;
    printf("enter n:");
    scanf("%d",&n);
    hanoi(n,A,B,C);

}

void hanoi(int n,char a,char b ,char c) //n代表有多少个盘子,a、b、c代表各个柱子
{
if(n == 1 || n == 0)
{
    printf("%c -- %c\n",a,c); //要是剩下最后一个盘子 就直接从a移到c

}else
{
   hanoi(n-1,a,c,b);    //借助c 把n-1个盘子从a移到b
   printf("%c -- %c\n",x,z);//直接把a移到c
   hanoi(n-1,b,a,c);//借助a 把n-1个盘子从b移到c
}
}

 

关于C语言解决汉诺塔(hanoi)问题

标签:bsp   else   nbsp   font   来源   印度   多少   mil   声明   

原文地址:https://www.cnblogs.com/bi-hu/p/13045778.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!