首页 > 其他分享 >汉诺塔

汉诺塔

时间:2023-07-04 20:13:10浏览次数:31  
标签:位置 int move char 移到 汉诺塔

使用递归模拟N层汉诺塔的移动过程

把N层塔从A移到C,分为三步:
    1.把A的N-1层移到B
    2.把A剩下最后一层移到C
    3.把B上的N-1层移到C
使用递归只要解决N-1层问题就能解决全部问题。
新建函数void move(int n,char a,char b,char c);
n为层数,a为起始位置,b为缓冲位置,c为目标位置
当a上的层数为n时,把a上的n-1层都移到b上,所以此时b为目标位置,c为缓冲位置
    move(n-1,a,c,b);
此时a剩下最后一层移到c上,c为目标位置
    move(1,a,b,c);
最后把b上的n-1层都移动到c上,b为起始位置
    move(n-1,b,a,c);
完成

1 #include <stdio.h>
2 #define layer 3 //层数
3
4 void move(int n,char a,char b,char c)
5 {
6 if(1 == n)
7 {
8 printf("from %c to %c\n",a,c);
9 }
10 else
11 {
12 move(n-1,a,c,b);
13 move(1,a,b,c);
14 move(n-1,b,a,c);
15 }
16 }
17
18 int main()
19 {
20 move(layer,'A','B','C');
21 }

标签:位置,int,move,char,移到,汉诺塔
From: https://www.cnblogs.com/ycddqr/p/17526870.html

相关文章

  • 通天之汉诺塔
    通天之汉诺塔汉诺塔移动的次数是2^n-1,但是呢由于本题的n很大,所以要用到高精,考察高精度,来愉快的打一下吧(呜呜我一直觉得高精没啥用所以妹学#include<bits/stdc++.h>usingnamespacestd;longlongn,a[10000010],l=1;voidp()//高精度函数加法{for(inti=1;i<=l;i......
  • 汉诺塔(三)
    汉诺塔(三)3000 ms | 内存限制:655353在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧......
  • 汉诺塔问题
    移动步骤三根柱子A,B,C。A杆上有N个N>1N>1穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:*每次只能移动一个圆盘;大盘不能叠在小盘上面。解法一:使用递归分析:当只有一个时,只需把第一个盘从a移到c两个时,先把第一个盘从a移到b,再把第二个盘从a移到c,最......
  • 汉诺塔问题(递归)
    #include<iostream>usingnamespacestd;voidmove(intn,chara,charb,charc){ if(n==0) return; move(n-1,a,c,b); cout<<a<<"-->"<<c<<endl; move(n-1,b,a,c);}intmain(){ intn; chara='......
  • 汉诺塔VII 1997 (技巧+递推)
    汉诺塔VIITimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):1261    AcceptedSubmission(s):838ProblemDescriptionn个盘子的汉诺塔问题的最少移动次数是2^n-1,即在移动过程中会产生2^n个系列。......
  • 汉诺塔DP
    题目描述如果将课本上的汉诺塔问题稍做修改:给定N只盘子,3根柱子,但是允许每次最多移动相邻的M只盘子(当然移动盘子的数目也可以小于M),最少需要多少次?输入格式输入数据仅有一行,包括两个数N和M(0<=M<=N<=8)输出格式仅输出一个数,表示需要移动的最少次数 #in......
  • 汉诺塔递归
    法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的n片金片。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只......
  • 递归汉诺塔
    题目描述法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的n片金片。不论白天黑夜,总有一个僧侣在按照下面的法则移动这......
  • 汉诺塔与二进制、满二叉树的千丝万缕
    汉诺塔(TowerofHanoi)源于印度传说中,大梵天创造世界时造了三根金钢石柱子,其中一根柱子自底向上叠着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。汉诺塔递归算法3......
  • 征服汉诺塔问题
    1.递归汉诺塔问题很多人都听说过汉诺塔问题,这是来源于印度的古代游戏。一个板子上有三根柱子以及一些大小和颜色各不相同的圆盘。我们分别把这三根柱子叫做起始柱A、辅助......