• hanoi(老汉诺塔问题新思维)


    #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) return;
        if (n==1)  
        move(1,from,to);//只有一个盘子是直接将初塔上的盘子移动到目的地  
        else  
        {  
          hanoi(n-2,from,denpend_on,to);   
          move(n-1,from,denpend_on);               
          hanoi(n-2,to,from,denpend_on);
          move(n,from,to);
          hanoi(n-2,denpend_on,to,from);
          move(n-1,denpend_on,to);
          hanoi(n-2,from,denpend_on,to);
        }  
    }  
    void main()  
    {  
         printf("请输入盘子的个数:
    ");  
         int n;  
         scanf("%d",&n);  
         char x='A',y='B',z='C';  
         printf("盘子移动情况如下:
    ");  
         hanoi(n,x,y,z);  
    }  

    此解用于讲解原问题与子问题之间能建立合适的关系即可,无需要非要让n阶问题与n-1阶问题产生关系。

    n阶问题与其子问题n-2阶问题如下图所示:

  • 相关阅读:
    Python 函数装饰器简明教程
    *arg和**kwarg的区别
    克里金插值
    C语言Hello world
    ibatis错误
    typealias
    视图
    权限分级设置
    走出浮躁的泥沼:学会享受学习过程的乐趣
    R语言 eval(quote(x)) 和 eval(x)
  • 原文地址:https://www.cnblogs.com/ewitt/p/6801871.html
Copyright © 2020-2023  润新知