首页 > 其他分享 >关于汉诺塔问题一些体会(大学复健的第一篇随笔)

关于汉诺塔问题一些体会(大学复健的第一篇随笔)

时间:2023-02-02 22:36:09浏览次数:44  
标签:复健 柱子 移动 int char 汉诺塔 随笔 问题

递归条件


  • 相同结构的子问题————考察子问题与当前问题的关系

  • 存在可以单独计算基础结构


所以我们考察第一个条件,汉诺塔的移动方式

第一步将所有上层移动到一个目标柱子外的柱子上

第二步将最大的柱子移动到目标柱子上

第三步将剩下的柱子移动到目标柱子上


而第二步和第三步又可以看做是第一步的一个变种,只是将柱子的顺序打乱了,但是执行同样的步骤是同样的。理解之后,我们便可以将无论有多少层的汉诺塔看做只有两层的汉诺塔进行处理,而这样以后,每当处理上层时我们便要解决上层移动到空柱子上的问题,而又有一个与上一个问题相同的子问题,于是这样一直下去,直到最后真的只剩下两层……

#include<bits/stdc++.h>
using namespace std;

int n;
int ans;
void f(int num,char A,char B,char C){
	if(num==1){
		ans++;
		cout<<A<<"->"<<C<<endl;
		return;
	}
	f(num-1,A,C,B);            //将num-1层从A移动到空白柱子B上 
	cout<<A<<"->"<<C<<endl;
	ans++;
	f(num-1,B,A,C);           //从刚才的B上移动到目标柱子C上 
	cout<<B<<"->"<<C<<endl;
	ans++;
}

int main(){
	cin>>n;
	f(n,'A','B','C');
	cout<<ans;
}

标签:复健,柱子,移动,int,char,汉诺塔,随笔,问题
From: https://www.cnblogs.com/1129-tangqiyuan/p/17087616.html

相关文章

  • 闲散随笔的C++教程(一)——绪
    绪在猴子的世界中,编程语言是很多的。你不一定非要选择C++——没错,这并不是一门非常好学的语言。所以当你看到这个开头时就后悔,还是来得及的。但是看样子你是不准备后悔,或......
  • 随笔
    操作系统:为啥要引入操作系统,个人的理解是为了实时性(即及时的响应性)。没有操作系统下多个任务都只能以前后台的方式排队执行,对某个任务的输入不能得到及时的响应;虽然后台......
  • 【python学习随笔】02 python的简单例子
    02python的简单例子fromrandomimportrandrange,shuffledefbubbleSort():array=[]whilelen(array)<12:#范围内随机取12个数值array.a......
  • 【python学习随笔】03 python中的类和对象
    03python中的类和对象“一切皆为对象”这句话大家都有所耳闻,那么对象object是什么呢,而类class又是什么呢?我们以一个例子来解释:classCar:'''这是小汽车......
  • jQuery基础学习随笔 2023
    jQuery多库共存//1.如果$符号冲突,就使用jQueryconsole.log(jQuery("div"));//$("div")//......
  • 随笔(十五)『SpringBoot 整合 Redis』
    一、添加依赖<!--redis启动器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>......
  • JMeter随笔
    脚本录制testplan->threadgroup->logiccontroller->recordingcontrollertestplan->nontestelements->httptestscriptcontroller  浏览器安装swichyomega......
  • CSAPP随笔:信息的存储
     1. 可寻址的最小内存单位:字节。 2.虚拟内存:一个极其大的字节数组。 3.地址:用唯一的数字标识内存的每个字节。 4.虚拟地址空间:所有可能地址的集合。 5.c语......
  • C++复健:运算符重载,实现string容器,实现string和vector的迭代器
    使得对象的运算像内置类型一样a.operator+(b);重载运算符的一些注意点:不能重载运算符操作基础数据类型:(1)重载运算符必须和用户定义的class类型一起使用(2)重载的运算符......
  • 初识C语言随笔
    常量:1.不变的量变量前面加const变常量const为常属性2.const修饰的常变量:常属性的变量不可以用在数组3.#define定义的标识符常量可用于数组intarr[MAX]=......