博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
双色汉诺塔【分离型】
阅读量:6712 次
发布时间:2019-06-25

本文共 980 字,大约阅读时间需要 3 分钟。

来源:

说明

双色河内塔是由之前所介绍过的河内塔规则衍生而来,双色河内塔的目的是将下图左上的圆环位置经移动成为右下的圆环位置:

 

解法

双色河内塔或是原始的河内塔,其解法观念与之前介绍过的河内塔是类似的,同样也是使用递回来解,不过这次递回解法的目的不同,我们来看双色的情况,这很简单,

只要将第一柱的黄色移动至第二柱,而接下来第一柱的蓝色移动至第三柱。再来是四个盘的情况,首先必须用递回完成下图左上至右下的移动:

 

 

接下来最底层的就不用管它们了,因为它们已经就定位,只要再处理第一柱的上面两个盘子就可以了。那么六个盘的情况呢?一样!首先必须用递回完成下图左上至右下的移动:

 

 

接下来最底层的就不用管它们了,因为它们已经就定位,只要再处理第一柱上面的四个盘子就可以了,这又与之前只有四盘的情况相同,接下来您就知道该如何进行解题了,无论是八个盘、十个盘以上等,都是用这个观念来解题。

简单的写一下程序:

【代码2做了一点点小改动,加了一点注释、同时输出具体的移动过程。】

代码1:

1 //来源:http://blog.csdn.net/heaven13483/article/details/8330503 2 #include 
3 using namespace std; 4 5 int step=0; 6 7 //将在B中最底下的两个盘子当中上边的那一个移动到C 8 void Move1(char B,char C) 9 {10 cout<<"将一个从"<
<<"移动到"<
<

代码2:

1 //来源:http://blog.csdn.net/heaven13483/article/details/8330503 2 #include 
3 using namespace std; 4 5 int step=0; 6 7 //将在B中最底下的两个盘子当中上边的那一个移动到C 8 void Move1(char B,char C) 9 {10 step++;11 cout<<"step:"<
<<" "<
<<"---->"<
<

 

你可能感兴趣的文章
设计模式-组合模式
查看>>
uva 11437 - Triangle Fun
查看>>
SSD卡对mongodb的影响
查看>>
ecshop标签
查看>>
阅读书籍---程序员必读系列
查看>>
C++中的单例模式
查看>>
数据库时间戳设计
查看>>
Retrofit2.0- 源码分析
查看>>
webpack笔记
查看>>
Android常用技能
查看>>
Spring Data JPA REST Query Criteria
查看>>
In FontFamilyFont, unable to find attribute android:font的报错处理
查看>>
网络编程-I/O基础
查看>>
Netty+SpringBoot+FastDFS+Html5实现聊天App详解(一)
查看>>
【跃迁之路】【721天】程序员高效学习方法论探索系列(实验阶段478-2019.2.11)...
查看>>
区块链之比特币的潜在激励
查看>>
Learning Python, 5th Edition 读书笔记 1
查看>>
【译】理解回调和Promise
查看>>
市场变冷,不要灰心。更应该延长你的黄金岁月
查看>>
又一轮子?Typescript+React+Redux,放弃saga,支持服务器渲染同构
查看>>