首页 > 其他分享 >汉诺塔

汉诺塔

时间:2023-08-13 16:46:51浏览次数:30  
标签:int void move char num 汉诺塔

汉诺塔

#include <stdio.h>
#include <time.h>

#define N 5


void solve();
void move(char a, char b, char c, int num);
void print_hanoi();

int main(int argc, char** argv) {
    clock_t begin, end;
    begin = clock();
    solve();
    end = clock();
    printf("%d pans, time cost: %.3f ms\n", N, (end-begin)*1000./CLOCKS_PER_SEC);

    return 0;
}

void solve() {
    move('a', 'b', 'c', N);
}

void move(char a, char b, char c, int num) {
    if (num == 1) {
        printf("%c -> %c\n", a, b);
        return;
    }
    move(a, c, b, num - 1);
    move(a, b, c, 1);
    move(c, b, a, num - 1);
}

测试:

a -> b
a -> c
b -> c
a -> b
c -> a
c -> b
a -> b
a -> c
b -> c
b -> a
c -> a
b -> c
a -> b
a -> c
b -> c
a -> b
c -> a
c -> b
a -> b
c -> a
b -> c
b -> a
c -> a
c -> b
a -> b
a -> c
b -> c
a -> b
c -> a
c -> b
a -> b
5 pans, time cost: 0.072 ms

标签:int,void,move,char,num,汉诺塔
From: https://www.cnblogs.com/minding/p/17626749.html

相关文章

  • 汉诺塔问题(递归)
    博客地址:https://www.cnblogs.com/zylyehuo/#_*_coding:utf-8_*_defhanoi(n,a,b,c):ifn>0:hanoi(n-1,a,c,b)print("movingfrom%sto%s"%(a,c))hanoi(n-1,b,a,c)hanoi(5,'A','B�......
  • 汉诺塔
    问题介绍法国数学家 爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神 梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面......
  • 汉诺塔(2题)
     题解:1#include<iostream>2#include<algorithm>3#include<cstdio>4#include<cmath>5#include<cstring>6#include<vector>7#include<map>8#include<stack>9#include<queue>10#......
  • 汉诺塔
    使用递归模拟N层汉诺塔的移动过程把N层塔从A移到C,分为三步:1.把A的N-1层移到B2.把A剩下最后一层移到C3.把B上的N-1层移到C使用递归只要解决N-1层问题就能解决全部问题。新建函数voidmove(intn,chara,charb,charc);n为层数,a为起始位置,b为缓冲位置,c为目标位......
  • 通天之汉诺塔
    通天之汉诺塔汉诺塔移动的次数是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......