纠结了好久才弄得明白一点点的汉诺塔问题,现在把一些方程与大家分享一下!

简介:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

谢谢各位的支持!下面是我这两天仔细研究的结果,希望大家看看有什么不对!有的话,请提出你的意见,谢谢了!
这个程序是目的是:将A柱上的金盘移到B柱上

//从A到B

#include < iostream >

using namespace std;

void move(int inum, char from, char to);
void hanoi(int inum, char a, char b, char c);

void main()
{
int inum;

cout << "Please input the number of Gold Disk :" << endl;
cin >> inum;

cout << "当金盘数为"<< inum
<< "时将A上的金盘移动到B上的步骤为:"
<< endl;
hanoi(inum, 'A', 'B', 'C'); // 借助C,将A上的金盘移动到B上
}

void move(int inum, char from, char to)
{
cout << inum <<" :" << from << "移动到" << to << endl;
}

void hanoi(int inum, char a, char b, char c)
{
if (inum == 1) //每一次递归的终止条件
move(inum, a, b); //将第inum个金盘直接移动到B上
else
{
hanoi(inum-1, a, c, b); //将inum-1个金盘借助于B,从A移动到C上
move(inum, a, b); //将第inum个个金盘直接从A移动到B上
hanoi(inum-1, c, b, a); //将第inum-1个金盘借助于A,从C移到B上,就可以完成了目的
} //即从A上的金盘全部移到B上
}

 

 

以下只分析inum = 3的情况:

 

当inum = 3 时:程序其实是:

hanoi(3, A,B,C)
{
   if(为1)
      move(1, A,B);     //将第inum个金盘直接移动到B上
   else
   {
      @1: hanoi(2,A,C,B);  //将inum-1个金盘借助于B,从A移动到C上
      @2: move(2,A,B);     //将第inum个个金盘直接从A移动到B上
      @3: hanoi(2,C,B,A);  //将第inum-1个金盘借助于A,从C移到B上,就可以完成了目的
   }
}

===>>>
@1: 先执行这个
hanoi(2, A,C,B)
{
   if(为1)
      move(1, A,C);   
   else
   {
       hanoi(1,A,B,C); 
       move(2,A,C);    
       hanoi(2,B,C,A); 
   }
}

hanoi(1, A,B,C)
{
   if(为1)
      move(1, A,B);           // 1:A移到B
   else
   {
      
     //这部分不用看了,,在此不修改了!
       
   }
}

 

===================================================================
@2:再执行这个:
move(2,A,C);                 //2:输出A到C

@3:再执行这个:
hanoi(2,B,C,A);        //这里就不一一列出来了,输出结果应该是: 1:B移到C   3:A移动到B

最后就执行move:
        2:C移动到B    1:A移到B       

 

 

 

 

 

大家有什么补充请补充一下,谢谢,互相学习学习!

 

 

 

目录
相关文章
|
XML Java 程序员
跟面试官刚聊几句,被发现连这几道都不会,便被请了出去
跟面试官刚聊几句,被发现连这几道都不会,便被请了出去
77 0
|
开发者
试着做点儿有趣的事情
一个游戏怎样才算是做完了?这是个因人而异的问题。有些游戏还没有做出来就做完了,因为开发者不想再做了。有的游戏看上去做完了,但是后续还在不停的更新,那我们就说这个游戏其实还没有做完。至于如何算是做完了,我觉得这应该交由该游戏的制作者来决定。
92 0
|
JavaScript 前端开发
不看后悔系列!原来代码还可以这么写!
不看后悔系列!原来代码还可以这么写!
|
算法
一看就懂,一写就懵?搞懂回溯算法,一口气刷了20多道题(中)
回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。——摘自《百度百科》
398 0
一看就懂,一写就懵?搞懂回溯算法,一口气刷了20多道题(中)
|
机器学习/深度学习 算法
一看就懂,一写就懵?搞懂回溯算法,一口气刷了20多道题(上)
回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。——摘自《百度百科》
216 0
一看就懂,一写就懵?搞懂回溯算法,一口气刷了20多道题(上)
|
存储 编译器
懂了嘎嘎乱杀,但我赌你会懵——指针进阶终极版
正片开始👀 细化指针这一部分内容,现在着重把一些指针的运用情景搬出来康康,如果对指针盘的非常熟练了,或者指针还出于入门阶段的铁子请绕道(晕头警告) 直接给大家盘个套餐: 一维数组👏
懂了嘎嘎乱杀,但我赌你会懵——指针进阶终极版
|
算法
一看就懂,一写就懵?搞懂回溯算法,一口气刷了20多道题(下)
回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。——摘自《百度百科》
144 0
|
程序员
我想到的几句话。
1、OO是好用的,问题是好多人用不好OO。(包括我在内) 2、三层是需要设计的,不是说把原来写在一处的代码,分开写在三处,就是三层了。 3、设计模式是需要灵活掌握的,外加丰富的项目经验和对业务逻辑的深刻理解。
599 0
今天在一个编程网站试着做题
虽然还是有些英文不懂,但借助翻译工具还是大部分可以明白意思的,毕竟很多的是编程的术语. 网站是这个: http://www.codewars.com  ,做完题后,会显示其他人做的方法用来借鉴学习. 将编程看作是一门艺术,而不单单是个技术。
936 0