zoukankan      html  css  js  c++  java
  • 汉诺塔

    /*
         经典算法——1 河内之塔: 有三个柱子和 n 个大小各不相同的
      盘子。开始时,所有盘子以塔状叠放在柱子 A 上,要求一定规
      则,将柱子 A 上的所有盘子移到柱子 B 上,柱子 C 为移动缓
      冲柱。
      移动规则如下:
         (1)一次只能移动一个盘子。
      (2)任何时候不能把盘子放在比他小的盘子下面。 
    */  
    /*
        采用递归的方法解决此问题。
     (1)描述解决问题的思想:
            1. 若只有一个盘子,则可以直接从A移动到B
         2. 若盘子数大于 1 ,则需要先将 n-1 个盘子从 A 移动
         到缓冲区 C ,再将 A 中剩下的最大的一个盘子移动到终
         点盘 B ,最后再将缓冲区 C 上的 n-1 个盘子移动到终
         点盘 B 。
     (2)递归算法(见下面代码)          
    */
    # include <stdio.h> 
    void hanoi(int, char, char, char); 
    int main(void)
    {
        int disks;  // 定义盘子总数。
        printf("请输入盘子总数目:");
        scanf("%d", &disks);
        printf("
    ");
        hanoi(disks, 'A', 'B', 'C');  //  A 为最开始盘子所在的地方 B 为最后盘子要放置的地方  C 为缓冲地带  
     
        return 0;
    }
    void hanoi(int n, char A, char B, char C)   //  A 为最开始盘子所在的地方 B 为最后盘子要放置的地方  C 为缓冲地带  
    { 
        if (1 == n)
        {
            printf("%c 移到 %c", A, B);
        }
        else  // 整个移动过程中的一个基本单元 
        {
            // hanoi 函数中的不同的盘子作用要与形参一致, 见下一个改变了盘子功能的程序 
            hanoi(n-1, A, C, B);  // 将 n-1 个盘子从起始区移到缓冲区
            printf("
    ");
            printf("%c 移到 %c", A, B);  // 将最大的盘子移到终点区 
            printf("
    "); 
            hanoi(n-1, C, B, A);  // 将缓冲区的 n-1 个盘子移到终点区
              printf("
    ");   
        }
        printf("一共需要执行%d次!
    ", i);
     
        return;
    }
    /*
          输出结果: 
              请输入盘子总数目:4
        A 移到 C
        A 移到 B
        C 移到 B
        
        A 移到 C
        B 移到 A
        B 移到 C
        A 移到 C
        
        
        A 移到 B
        C 移到 B
        C 移到 A
        B 移到 A
        
        C 移到 B
        A 移到 C
        A 移到 B
        C 移到 B
        
        
        
        --------------------------------
        Process exited after 1.463 seconds with return value 0
        请按任意键继续. . .
    */
  • 相关阅读:
    legend3---2、网站的代码里面的/也是代表根目录
    legend3---PHP使用阿里云短信服务
    legend3---laravel验证码使用
    好用网站推荐
    The practice program of C on point
    Android自己定义组件系列【9】——Canvas绘制折线图
    网络流24题 之十四 孤岛营救问题 分层图
    关于安卓你不知道的6件事
    OpenStack_Swift源代码分析——Ring基本原理及一致性Hash算法
    Codeforces554D:Kyoya and Permutation
  • 原文地址:https://www.cnblogs.com/lnlin/p/6545616.html
Copyright © 2011-2022 走看看