zoukankan      html  css  js  c++  java
  • 经典递归解决汉诺塔

    算法:当只有一个盘子的时候,只需要从将A塔上的一个盘子移到C塔上。

                当A塔上有两个盘子是,先将A塔上的1号盘子(编号从上到下)移动到B塔上,再将A塔上的2号盘子移动的C塔上,最后将B塔上的小盘子移动到C塔上。

                当A塔上有3个盘子时,先将A塔上编号1至2的盘子(共2个)移动到B塔上(需借助C塔),然后将A塔上的3号最大的盘子移动到C塔,最后将B塔上的两个盘子借助A塔移动到C塔上。

               当A塔上有n个盘子是,先将A塔上编号1至n-1的盘子(共n-1个)移动到B塔上(借助C塔),然后将A塔上最大的n号盘子移动到C塔上,最后将B塔上的n-1个盘子借助A塔移动到C塔上。

              综上所述,除了只有一个盘子时不需要借助其他塔外,其余情况均一样(只是事件的复杂程度不一样)。

    方法一:

    #include <stdio.h>
    //第一个塔为初始塔,中间的塔为借用塔,最后一个塔为目标塔
    int i=1;//记录步数
    
    void move(int n,char from,char to) //将编号为n的盘子由from移动到to
    {printf("第%d步:将%d号盘子%c---->%c
    ",i++,n,from,to);
    }
    void hanoi(int n,char from,char denpend_on,char to)//将n个盘子由初始塔移动到目标塔(利用借用塔)
    {
        if (n==1)
        move(1,from,to);//只有一个盘子是直接将初塔上的盘子移动到目的地
        else
        {
          printf("i=%d
    ",1);
          hanoi(n-1,from,to,denpend_on);//先将初始塔的前n-1个盘子借助目的塔移动到借用塔上
    
          printf("i=%d
    ",2);
          move(n,from,to);             //将剩下的一个盘子移动到目的塔上
    
          printf("i=%d
    ",3);
          hanoi(n-1,denpend_on,from,to);//最后将借用塔上的n-1个盘子移动到目的塔上
    
        }
    }
    void main()
    {
         printf("请输入盘子的个数:
    ");
         int n;
         scanf("%d",&n);
         char x='A',y='B',z='C';
         printf("盘子移动情况如下:
    ");
         hanoi(n,x,y,z);
    }

    方法二:

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        void f(int n,char x,char y,char z);
        int m;
        scanf("%d",&m);
        f(m,'a','b','c');
    }
    void f(int n,char x,char y,char z )
    {
        if(n==1)
         printf("%c>>%c
    ",x,z);
        else if(n>1){
    
             f(n-1,x,z,y);
             printf("%c>>%c
    ",x,z);
             f(n-1,y,x,z);
        }
    
    }
    

      

  • 相关阅读:
    Linnia学习记录
    漫漫考研路
    ENS的学习记录
    KnockoutJS 3.X API 第四章 数据绑定(4) 控制流with绑定
    KnockoutJS 3.X API 第四章 数据绑定(3) 控制流if绑定和ifnot绑定
    KnockoutJS 3.X API 第四章 数据绑定(2) 控制流foreach绑定
    KnockoutJS 3.X API 第四章 数据绑定(1) 文本及样式绑定
    KnockoutJS 3.X API 第三章 计算监控属性(5) 参考手册
    KnockoutJS 3.X API 第三章 计算监控属性(4)Pure computed observables
    KnockoutJS 3.X API 第三章 计算监控属性(3) KO如何实现依赖追踪
  • 原文地址:https://www.cnblogs.com/sunli0205/p/6070070.html
Copyright © 2011-2022 走看看