汉诺塔

【问题描述】

  有n个圆盘,依半径大小(半径都不同),自下而上套在A柱上,每次只允许移动最上面一个盘子到另外柱子上去(除A柱外,还有B柱和C柱,开始时这两个柱上无盘子),但绝不允许发生柱上出现大盘子在上,小盘子在下的情况,现要求设计将A柱子上n个盘子搬移到C柱去的方法。

【样例输入】

  3

【样例输出】

  1:x ----> z

  2:x ----> y

  3:z ----> y

  4:x ----> z

  5:y ----> x

  6:y ----> z

  7:x ----> z

  7

 

【过程分析】

 

 

复制代码
#include<iostream>
using namespace std;
int cnt=0;

void hnt(int n, char x, char z, char y){
    if(n==0) return;
    // 假设n=2,则: 
    hnt(n-1, x, y, z); // x->y,所以z过度柱。
    cnt++;
    cout<<cnt<<" "<<x<<" ----> "<<z<<endl; // x->z 直接输出,不需要调用。 
    hnt(n-1,y, z, x); // y->z,所以x过度柱。    
} 

int main(){
    int n;
    cin>>n; 
    hnt(n,'x', 'z', 'y'); // y是过度柱。 
    cout<<cnt; 
    return 0;
} 
复制代码

 

posted @   Hi,小董先生  阅读(138)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示