当前位置:网站首页>Hanoi塔问题
Hanoi塔问题
2022-06-27 17:53:00 【比特冬哥】
前言
现代认知心理学用于研究人的问题解决过程的心理特点的一个实验。河内塔问题的初始状态有A、B、C三根柱子,在A柱上有中间带孔从大到小由下到上重叠像“塔”一样的若干圆盘。目标状态是将“塔”移到C柱上,B柱作为过渡。规则是每次只能移动最上面的一个圆盘, 大圆盘不能压在小圆盘上。要求探索从初始状态到目标状态的通路,最终解决问题,达到目标状态。被试者一边思考,一边大声报告出思考的内容。主试根据被试的口头报告, 分析其思维活动过程。
一、Hanoi塔问题是什么?
河内塔问题是问题解决研究中的经典实验。给出柱子1、2、3,在柱1上,有一系列圆盘,自上而下圆盘的大小是递增的,构成金字塔状。要求被试将柱1的所有圆盘移到柱3上去,且最终在柱3上仍构成金字塔排列,规则是每次只能移动一个圆盘,且大盘不可压在小盘之上,可以利用圆柱2。完成河内塔作业的最少移动次数为2-1次,其中n为圆盘的数目。
二、问题描述
一块板上有三根针 A、B、C。A 针上套有 64 个大小不等的圆盘,按照大的在下、小的在上的顺序排列,要把这 64 个圆盘从 A 针移动到 C 针上,每次只能移动一个圆盘,移动过程可以借助 B 针。但在任何时候,任何针上的圆盘都必须保持大盘在下,小盘在上。从键盘输入需移动的圆盘个数,给出移动的过程。
三、算法思想
当只移动一个圆盘时,直接将圆盘从 A 针移动到 C 针。
若移动的圆盘为 n(n>1),则分成几步走:
- 把 (n-1) 个圆盘从 A 针移动到 B 针(借助 C 针);
- A 针上的最后一个圆盘移动到 C 针;
- B 针上的 (n-1) 个圆盘移动到 C 针(借助 A 针)。
每做一遍,移动的圆盘少一个,逐次递减,最后当 n 为 1 时,完成整个移动过程。
因此,解决汉诺塔问题可设计一个递归函数,利用递归实现圆盘的整个移动过程,问题的解决过程是对实际操作的模拟。
四、解决策略
解决河内塔问题有以下四种常用策略:
- 循环子目标,又称目标递归策略:思路是要把最大的金字塔移到柱3,就要先把次大的金字塔移到柱 2;而要把次大的金字塔移到柱2,就要先把比它小一层的金字塔移到柱3;…依次类推,直到只需要移动最上面的盘为止。这种策略类似计算机的递归,它是内部指导的策略,被试不必看具体刺激,只是把内部目标记在脑中,然后一步步循环执行,直到解决问题。
- 知觉策略:这种策略是刺激指导的策略,根据所看到的情景与目标的关系,排除当前最大的障碍,从而一步步达到目标。
- 模式策略:也是内部指导的策略,但不涉及目标,而是按一定规则来采取行动。解决河内塔的通用规则是,当圆盘的总数为奇数时,最小的圆盘按1->3->2->1->3->2的顺序移动,当总数为偶数时,按1->2->3->1->2->3的顺序移动。
- 机械记忆策略:这种策略是将做对的一系列步骤死记硬背下来,但无法创新,不可迁移。
五、代码实现
这里我以第一种解决策略为例进行代码编写
示例代码:
#include<iostream>
using namespace std;
int m=0; //对搬动计数
void move(char A,int n,char C) //搬动操作
{
cout<<"第"<<++m<<"步,"<<"将编号为"<<n<<"的圆盘从第"<<A<<"个柱子上移到第"<<C<<"个柱子上"<<endl;
}
void hanoi(int n,char A,char B,char C) //将塔座A上的n个圆盘按规则搬到C上
{
if(n==1)
move(A,1,C);
else
{
hanoi(n-1,A,C,B); //将A上编号为1至n-1的圆盘移到B,C做辅助塔
move(A,n,C); //将编号为n的圆盘从A移到C
hanoi(n-1,B,A,C); //将B上编号为1至n-1的圆盘移到C,A做辅助塔
}
}
int main()
{
int n;
char a,b,c;
a='1';
b='2';
c='3';
cout<<"请输入初始第一个柱子上的圆盘个数:"<<endl;
cin>>n;
cout<<"将第一个柱子上的圆盘全部移动到第三个柱子上的过程为:"<<endl;
hanoi(n,a,b,c);
return 0;
}
边栏推荐
- 教你打印自己的日志 -- 如何自定义 log4j2 各组件
- Workflow automation low code is the key
- maxwell 报错(连接为mysql 8.x)解决方法
- (LC)46. 全排列
- openssl客户端编程:一个不起眼的函数导致的SSL会话失败问题
- 判断一个变量是数组还是对象?
- Pyhton爬取百度文库文字写入word文档
- [cloud based co creation] the "solution" of Digital Travel construction in Colleges and Universities
- On thread safety
- 在线文本按行批量反转工具
猜你喜欢

The IPO of Yuchen Airlines was terminated: Guozheng was proposed to raise 500million yuan as the major shareholder

芯动联科冲刺科创板:年营收1.7亿 北方电子院与中城创投是股东

Function key input experiment based on stm32f103zet6 Library

爬取国家法律法规数据库

2022年第一季度消费金融APP用户洞察——总数达4479万人

拥抱云原生:江苏移动订单中心实践

Erreur Keil de Huada Single Chip Computer La solution de Weak

实战回忆录:从Webshell开始突破边界

Oracle 获取月初、月末时间,获取上一月月初、月末时间

【登录界面】
随机推荐
Market status and development prospect of resorcinol derivatives for skin products in the world in 2022
明美新能源冲刺深交所:年应收账款超6亿 拟募资4.5亿
基于STM32F103ZET6库函数跑马灯实验
使用MySqlBulkLoader批量插入数据
芯动联科冲刺科创板:年营收1.7亿 北方电子院与中城创投是股东
过关斩将,擒“指针”(下)
Bit.Store:熊市漫漫,稳定Staking产品或成主旋律
What is ICMP? What is the relationship between Ping and ICMP?
shell脚本常用命令(三)
判断一个变量是数组还是对象?
Four years of College for an ordinary graduate
Cloud native database: the outlet of the database, you can also take off
labelimg使用指南
Tupu digital twin intelligent energy integrated management and control platform
云笔记到底哪家强 -- 教你搭建自己的网盘服务器
CDGA|交通行业做好数字化转型的核心是什么?
Usage of rxjs mergemap
这个是和数据采集一样,可以定义一个参数为上个月或者前一天,然后在sql中使用这个参数吗?
Bit.Store:熊市漫漫,稳定Staking产品或成主旋律
作为软件工程师,给年轻时的自己的建议(下)