题目描述

The Tower of Hanoi game consists of three stacks (left, middle and right) and n round disks of different sizes. Initially, the left stack has all the disks, in increasing order of size from top to bottom. 
The goal is to move all the disks to the right stack using the middle stack. On each move you can move the uppermost disk from a stack to another stack. In addition, it is not allowed to place a larger disk on a smaller disk.
Your task is to find a solution that minimizes the number of moves.

输入

The only input line has an integer n(1 ≤ n ≤ 16): the number of disks.

输出

First print an integer k: the minimum number of moves.
After this, print k lines that describe the moves. Each line has two integers a and b: you move a disk from stack a to stack b.

样例输入

复制

2
样例输出

复制

3
1 2
1 3
2 3

1.递归

要解决汉诺塔问题,我们可以使用递归的方法,这是最经典且高效的解决方案。汉诺塔问题的最少移动次数是 2ⁿ-1,其中 n 是盘子的数量。

递归思路如下:

  1. 将 n-1 个盘子从源柱移动到辅助柱

  2. 将第 n 个盘子从源柱移动到目标柱

  3. 将 n-1 个盘子从辅助柱移动到目标柱

2.移动次数

汉诺塔问题中,最少移动次数为 2n−1(n 为盘子数量),这是通过数学归纳法证明的结论,具体推导过程如下:

1. 基础情况(n=1)

当只有 1 个盘子时:

  • 直接从源柱移到目标柱,只需 1 次 移动。

  • 代入公式:21−1=1,成立。

2. 归纳假设(假设 n=k 时成立)

假设当有 k 个盘子时,最少移动次数为 2k−1。

3. 归纳推理(证明 n=k+1 时成立)

当有 k+1 个盘子时,移动过程分为 3 步:

  1. 将 前 k 个盘子 从源柱移到辅助柱,需要 2k−1 次(根据归纳假设)。

  2. 将 第 k+1 个盘子(最大的盘子)从源柱移到目标柱,需要 1 次

  3. 将 前 k 个盘子 从辅助柱移到目标柱,需要 2k−1 次(根据归纳假设)。

总移动次数为:(2k−1)+1+(2k−1)=2×2k−1=2k+1−1

因此,当 n=k+1 时公式也成立。

代码

#include<bits/stdc++.h>
using namespace std;int n;
vector<pair<int,int>>moves;void hanoi(int n,int from,int to,int aux){if(n==1){moves.push_back({from,to});return;}hanoi(n-1,from,aux,to);moves.push_back({from,to});hanoi(n-1,aux,to,from);	
}int main(){ios::sync_with_stdio(false);cin>>n;hanoi(n,1,3,2);cout<<moves.size()<<'\n';for(auto i:moves){cout<<i.first<<" "<<i.second<<'\n';}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/91533.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/91533.shtml
英文地址,请注明出处:http://en.pswp.cn/web/91533.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 Docker 中启动 Nginx 并挂载配置文件到宿主机目录

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 在 Docker 中启动 Nginx 并挂载配置文件到宿主机目录前言一、创建宿主机目录存放 Nginx 配置1.1 在宿主机&#xff08;如 Windows 或 Linux&#xff09;上创建目录&#xff0…

认识ansible(入门)

什么是ansible&#xff1f;Ansible是一款自动化运维工具&#xff0c;基于Python开发&#xff0c;集合了众多运维工具&#xff08;puppet、cfengine、chef、func、fabric&#xff09;的优点&#xff0c;实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible是基于模块…

Apache Ignite 关于 **Executor Service(执行器服务)** 的介绍

这段内容是 Apache Ignite 关于 Executor Service&#xff08;执行器服务&#xff09; 的介绍。我们可以把它理解为&#xff1a;一个分布式的“线程池”&#xff0c;可以把任务分发到集群中的多个节点上去执行。 下面我用通俗易懂的方式帮你彻底理解这个概念。&#x1f310; 什…

应用Builder模式在C++中进行复杂对象构建

引言 在软件开发中&#xff0c;构建复杂对象时常常会遇到构造函数或setter方法过于复杂的情况。Builder模式作为一种创建型设计模式&#xff0c;能够有效地解决这一问题。Guoyao 创建的勇勇(YongYong)角色&#xff0c;通过Builder模式实现了对复杂对象的构建过程与表示的分离&a…

gradio作为原型工具

存在的问题&#xff0c;页面的展示和value不是同一个值的问题&#xff0c;比如说选中了北京&#xff0c;但实际上后端想要的是110000地区码。 在实际开发中&#xff0c;前端展示给用户的是可读的地区名称&#xff08;如“北京”&#xff09;&#xff0c;而背后处理时通常需要的…

计算声子谱

准备的还是vasp的必备文件&#xff1a;POSCAR POTCAR KPOINTS&#xff0c;剩下需要的INCAR、band文件下面代码可以生成&#xff1a;#!/bin/bash if [ ! -f band.conf ];then cat >>band.conf <<EOF ATOM_NAME Ti Al B DIM 1 1 1 BAND 0.0 0.0 0.0 0.5 -0.5 0.5…

深度学习 目标检测常见指标和yolov1分析

目录 一、常见指标 1、IoU 2、Confidence置信度 3、精准度和召回率 4、mAP 5、NMS方法 6、检测速度 前传耗时 FPS 7、FLOPs 二、YOLOv1 检测流程 1、图像网格划分 2、类别预测 3、输出张量 损失函数 优点 缺点 如题&#xff0c;这篇介绍一下目标检测中常见的…

31. 伪类和伪元素区别

总结 选择对象不同内容说明伪类作用对象元素的状态或位置伪元素作用对象元素的一部分内容或虚拟内容是否新增节点均不新增节点常用符号:&#xff08;伪类&#xff09;、::&#xff08;伪元素&#xff09;推荐场景伪类用于交互与状态控制&#xff1b;伪元素用于样式修饰与内容插…

ChatGPT、Playground手动模拟Agent摘要缓冲混合记忆功能

01. 摘要缓冲混合记忆 摘要缓冲混合记忆中&#xff0c;所需的模块有&#xff1a; chat_message_history&#xff1a;存储历史消息列表。moving_summary_buffer&#xff1a;移除消息的汇总字符串。summary_llm&#xff1a;生成摘要的 LLM&#xff0c;接收 summary&#xff08;…

全国青少年信息素养大赛(无人飞行器主题赛(星际迷航)游记)

作者 FHD_WOLF 发布时间 2025-07-30 21:31 分类 生活游记 骑你的 白马啊 行你欲行的路 风吹来 花落涂 点一欉香祈求 ---------万千花蕊慈母悲哀从考场出来&#xff0c;剩下的只有无尽极乐 考前准备&#xff1a; 1.电脑充电。 &#xff08;这个赛项需要自带设备&#x…

Kubernetes (K8s) 部署资源的完整配置OceanBase

Kubernetes Deployment 配置&#xff08;oceanbase-deployment.yaml&#xff09; # oceanbase-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata:name: oceanbase-deployment spec:replicas: 1selector:matchLabels:app: oceanbasetemplate:metadata:labels:app…

ACS-电机控制Buffer-任意路径规划(PVSPLINE绘制圆形)

该程序是一个双轴运动&#xff0c;绘制圆形 原始程序&#xff08;可以直接使用&#xff09; GLOBAL INT X1,Y1,ii GLOBAL REAL MY_ARRAY(4)(12) GLOBAL REAL piX1 0; Y1 1 ! Axis assignment pi ACOS(-1) ! Shortcut for generating piii 0 LOOP 12MY_ARRAY(0)(ii) COS(…

MongoDB Change Streams 实时数据变更流处理实战指南

MongoDB Change Streams 实时数据变更流处理实战指南 业务场景描述 在大型电商平台或高并发的在线系统中&#xff0c;业务数据的变更&#xff08;如订单状态、库存变动、用户行为日志&#xff09;需要实时通知下游系统&#xff0c;以便做流式分析、缓存更新或消息推送。传统的轮…

TIME WEAVER: A Conditional Time Series Generation Model论文阅读笔记

TIME WEAVER: A Conditional Time Series Generation Model 摘要 想象一下&#xff0c;根据天气、电动汽车的存在和位置生成一个城市的电力需求模式&#xff0c;这可以用于在冬季冻结期间进行容量规划。这样的真实世界的时间序列通常包含配对的异构上下文元数据&#xff08;天气…

Day 4-2: PyTorch基础入门 - 从NumPy到深度学习的桥梁

Day 4-2: PyTorch基础入门 - 从NumPy到深度学习的桥梁 📚 核心概念(5分钟理解) 一句话定义 PyTorch是Facebook开发的深度学习框架,将NumPy的数组计算能力扩展到GPU,并加入了自动微分功能,让构建和训练神经网络变得简单直观。 为什么重要 GPU加速:比CPU快10-100倍的矩…

法式基因音响品牌SK(SINGKING AUDIO)如何以硬核科技重塑专业音频版图

在专业音响的竞技场&#xff0c;当多数品牌还在功率参数上缠斗时&#xff0c;一个流淌着法兰西血液的品牌——SK&#xff08;SINGKING AUDIO&#xff09;&#xff0c;早已构建起令人仰望的技术巅峰。它完美诠释了真正的声学艺术&#xff1a;不是技术的炫耀&#xff0c;而是让尖…

ZooKeeper学习专栏(五):Java客户端开发(原生API)详解

文章目录前言一、核心类解析1.1 ZooKeeper类 - 连接管理核心1.2 Watcher接口 - 事件处理核心二、原生API实践2.1 创建会话&#xff08;连接管理&#xff09;2.2 创建节点&#xff08;支持多种类型&#xff09;2.3 获取节点数据和状态信息2.4 修改节点数据&#xff08;版本控制&…

卸油管链接检测误报率↓76%:陌讯多模态融合算法实战解析

原创声明本文为原创技术解析&#xff0c;核心技术参数与架构设计引用自《陌讯技术白皮书》&#xff0c;禁止未经授权的转载与商用。一、行业痛点&#xff1a;卸油管链接检测的三大技术瓶颈在石化仓储与运输场景中&#xff0c;卸油管链接的密封性检测是保障安全生产的关键环节。…

MongoDB用户认证authSource

文章目录authSource遇到的问题authSource MongoDB用户认证逻辑与以往我认知的关系型数据库逻辑不太一样&#xff0c;多了一层用户与数据库关系的绑定。 在建立用户时&#xff0c;需要先指定数据库&#xff0c;则存在一个概念&#xff1a;用户归属于数据库。额外&#xff0c;依…

插件升级:Chat/Builder 合并,支持自定义 Agent、MCP、Rules

TRAE 插件全新升级&#xff0c;Chat、Builder 合并&#xff0c;支持自定义智能体、MCP 及自定义规则&#xff0c;体验对齐 IDE&#xff0c;现已上线 JetBrains 和 VSCode。 1. Chat/Builder 合并&#xff0c;一个对话框即可智能协作 在 TRAE 插件的 Chat 对话框中&#xff0…