C语言案例——汉诺塔问题

题目描述

  1. 每次只能移动一个圆盘
  2. 大的圆盘不能放在小的圆盘上面
  3. 可以使用一根额外的柱子作为辅助

默认三个柱子,盘子数量为N,

解法思路

设A\B\C三个柱子

将A柱上的n个盘子挪到C柱上,只有一个盘子的时候,只需从A挪到C。如果盘子的数量大于两个,将n-1个盘子从A挪到B,再将最下面的那个盘子从A挪到C 再将B上的n-1个盘子挪到C上 ......

解法代码

cs 复制代码
#include <stdio.h>  

void move(int num, char x, char y)
{
    printf("第%d个盘子,%c--->%c\n", num, x, y);
}

void hannot(int num, char A, char B, char C)
{
    if (num == 1)
    {
        move(num, A, C);
    }
    else
    {
        hannot(num - 1, A, C, B);
        move(num, A, C);
        hannot(num - 1, B, A, C);
    }
}

int main()
{
    int num = 0; // 盘子数量  
    printf("请输入盘子的数量: ");
    scanf("%d", &num);
    hannot(num, 'A', 'B', 'C'); // A起始位置,B中转位置,C目标位置  
    return 0;
}

运行结果

请输入盘子的数量:

3

第1个盘子,A--->C

第2个盘子,A--->B

第1个盘子,C--->B

第3个盘子,A--->C

第1个盘子,B--->A

第2个盘子,B--->C

第1个盘子,A--->C

相关推荐
珊瑚里的鱼2 分钟前
【动态规划】买卖股票的最佳时机含手续费
算法·动态规划
catchadmin13 分钟前
PHP 在领域驱动(DDD)设计中的核心实践
开发语言·php
2401_8856651924 分钟前
从零搭建卷积神经网络:基于PyTorch实现MNIST手写数字分类
pytorch·python·神经网络·算法·机器学习·分类·cnn
bIo7lyA8v24 分钟前
算法优化的多层缓存映射与访问调度模型的技术8
算法
SilentSamsara28 分钟前
MLflow 实验追踪与模型注册:从实验到生产的可复现工作流
开发语言·人工智能·pytorch·python·青少年编程
先吃饱再说32 分钟前
JavaScript栈和队列:从“冰柜里的雪糕”到“排队打饭”
javascript·数据结构
dongf201933 分钟前
R语言朴素贝叶斯算法---iris数据集
开发语言·算法·数据分析·r语言
小O的算法实验室34 分钟前
2025年KBS,基于强化学习离散状态转移算法+复杂约束下多无人机任务分配
算法
下班走回家36 分钟前
RAG 技术的进化:从朴素检索到 Agentic RAG
开发语言·人工智能·python
weixin_3077791337 分钟前
从“大海捞针”到“主动推理”:AI如何重塑云原生故障诊断的根因链
开发语言·人工智能·算法·自动化·原型模式