zoukankan      html  css  js  c++  java
  • COJ 0026 汉诺塔问题

    汉诺塔问题
    难度级别:B; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
    试题描述

        经典的汉诺塔游戏相信很多同学都会玩的,规则就不用赘述,百科一下就OK。有三个柱子A,B,C,A柱子上套有n个大小不等的盘子,任意两个盘子,上面的盘子一定小于下面的盘子。现在请你编写程序计算如何将这n个盘子按照规则移到C柱子上,每次只能移动一个盘子,移动过程中可以借助B柱子,任意状态,各个柱子的盘子必须小盘在放在大盘子上面。现在输入两个正整数n和m,表示有n个盘子,请你输出第m步的移动方法。

    输入
    两个正整数n和m
    输出
    第m步的移动方法
    输入示例
    3 4
    输出示例
    A-->C
    其他说明
    数据范围:0<n<16,0<m<2^n。样例说明: 当n=3时,第一步A-->C,第二步A-->B,第三步C-->B,第四步A-->C,第五步B-->A,第六步B-->C,第七步A-->C,本题应该输出第四步A-->C。

    题解:由于是第几解,我们可以YY一下怎么快速结束递归,我想的是弄一个标记变量随时退出吧?

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<algorithm>
     5 #include<queue>
     6 #include<cstring>
     7 #define PAU putchar(' ')
     8 #define ENT putchar('
    ')
     9 using namespace std;
    10 int n,Q;bool ans=false;
    11 void dfs(int h,char a,char b,char c){
    12     if(ans)return;
    13     if(h==1){if(--Q==0)printf("%c-->%c
    ",a,c),ans=true;return;}
    14     dfs(h-1,a,c,b);if(ans)return;if(--Q==0)printf("%c-->%c
    ",a,c),ans=true;dfs(h-1,b,a,c);return;
    15 }
    16 inline int read(){
    17     int x=0,sig=1;char ch=getchar();
    18     while(!isdigit(ch)){if(ch=='-')sig=-1;ch=getchar();}
    19     while(isdigit(ch))x=10*x+ch-'0',ch=getchar();
    20     return x*=sig;
    21 }
    22 inline void write(int x){
    23     if(x==0){putchar('0');return;}if(x<0)putchar('-'),x=-x;
    24     int len=0,buf[15];while(x)buf[len++]=x%10,x/=10;
    25     for(int i=len-1;i>=0;i--)putchar(buf[i]+'0');return;
    26 }
    27 void init(){
    28     n=read();Q=read();
    29     dfs(n,'A','B','C');
    30     return;
    31 }
    32 void work(){
    33     return;
    34 }
    35 void print(){
    36     return;
    37 }
    38 int main(){init();work();print();return 0;}
  • 相关阅读:
    SpringMVC中的@Controller和@RequestMapping到底什么鬼?
    String、StringBuffer和StringBulder
    对spring的理解是什么?
    Maven依赖解析
    【Java框架型项目从入门到装逼】第一节 Spring框架 IOC的丧心病狂解说
    python学习记录(二)安装python编辑器
    python学习记录(一)安装python
    C#.net ListView item 拖动排序实现方法
    使用sql语句实现跨数据库获取信息
    Asp.net弹出层并且有遮罩层
  • 原文地址:https://www.cnblogs.com/chxer/p/4591515.html
Copyright © 2011-2022 走看看