zoukankan      html  css  js  c++  java
  • Tower of Hanoi问题

    【问题描述】

    有A, B, C三个塔座,A上套有n个直径不同的圆

    盘,按直径从小到大叠放,形如宝塔,编号1, 2, 3 … n。

    要求将n个圆盘从A移到C,叠放顺序不变,移动过程中遵循

    下列原则:

    w每次只能移一个圆盘
    w圆盘可在三个塔座上任意移动
    w任何时刻,每个塔座上不能将大盘压到小盘上
     

    【解决方法】

    n=1时,直接把圆盘从A移到C

    n>1时,先把上面n-1个圆盘从A移到B,然后将n号盘从A移到C,再将n-1个盘从B移到C。即把求解n个圆盘的Hanoi问题转化为求解n-1个圆盘的Hanoi问题,依次类推,直至转化成只有一个圆盘的Hanoi问题

     1 main(  )
     2 {
     3        int m;
     4        printf("Input number of disks”);
     5        scanf("%d",&m);
     6        printf(”Steps : %3d disks”,m);
     7        hanoi(m,'A','B','C'); 
     8 }
     9 void hanoi(int n, char x, char y, char z) //x上的n个圆盘移到z上,y做辅助。
    10 {
    11      if(n= =1)
    12      move(1, x, z);//1号盘从x移到Z
    13      else
    14      {
    15          hanoi(n-1, x, z, y);//n-1个从 x 到 y, z 辅助
    16          move(n, x, z);//n号盘从 x 移到 z
    17          hanoi(n-1,y, x, z);//n-1个从 y 到z, x 辅助
    18      }
    19 }
    View Code
  • 相关阅读:
    组合数学练习
    floyd算法新理解
    图论练习
    GDOI2021 day2总结
    P3190 [HNOI2007]神奇游乐园
    P1932 A+B A-B A*B A/B A%B Problem
    P2289 [HNOI2004]邮递员
    P5056 【模板】插头dp
    P4323 [JSOI2016]独特的树叶
    CF1153D Serval and Rooted Tree
  • 原文地址:https://www.cnblogs.com/dingyichao/p/4021424.html
Copyright © 2011-2022 走看看