hanoi(n,x,y,z)

{

hanoi(n-1,x,z,y);//n-1 from x to y

move(x,z);//x->z

hanoi(n-1,y,x,z);//n-1 from y to z

}

hanoi(n-1,x,z,y)

{

hanoi(n-2,x,y,z);//n-2 from x to z

move(x,y);//n-1 from x to y

hanoi(n-2,z,x,y);//n-2 from z to y

}

the step move(x,y)  is what  you must do to realize hanoi(n-2,x,y,z),at last ,the last step will meet the first step that you can implement easily,this is the deepest I can comprehend

//11072013 add

对hanoi T的印象从大二接触C语言开始

其实算法非常简单,当盘子的个数为n时,移动的次数应等于2^n – 1(有兴趣的可以自己证明试试看)。后来一位美国学者发现一种出人//摘自百度

#include <stdio.h>
#define N 2 //N disks on original pillar void hanoi(char src, char mid, char dst, int n)
{
if (n == 1)
{
printf("Move disk %d from %c to %c\n", n, src, dst);
}
else {
hanoi(src, dst, mid, n - 1);
printf("Move disk %d from %c to %c\n", n, src, dst);
hanoi(mid, src, dst, n - 1);
}
} int main(void)
{
hanoi('A', 'B', 'C', N);
return 0;
}

借鉴了其他人的思路,总算稍微理解了上述算法的实现,整理步骤要点

the fact is that wo don't konw how to do but konw wo must do,and push to opration to the stack memory until we move the topest disk  to Z

a)step befor moving n to Z,the case is 1 to n-1 are on Y,the mothed is move n to Z,push the opration//the last opration

b)the last second situation is 1 to n-2 are on X,the mothed is move n-1 to Z,push the opration//second last opration

d)it is ease to see the first step is move n-(n-1) to X or Y

a and b is what we must do,and we have no other choices,but what has hanppend bettwen b and c,the stack has store all the oprations wo must do until c

assume the function can move 1 to n-1 to X or Y, so it can move 1 to n-2 to X or Y,and so on n-(n-1) to X or Y,it is easy to move n-(n-1) to X or Y

the reverse order you or the functon you build may implement,

e)n-1 disks on Y,put n on Z//after that,you can omit n on Z

f)n-2 disks on X,n-1 on Y//put the n-1 on Z,the question return to a,so a and b is the whole task need to resolve

****the last situation is 2 disks on X or Y

the whole steps is like ,if 1 OK,then 2OK;if 2 OK,then 3 OK

个人感悟:1,有时候踢皮球也是一种办法,此处是往上踢,有点默认路由的味道,没有别的选择

     2,当你身处多级环境中,而且视野范围有限的情况下,只能虚构方法,即使不知道方法是怎么实现

3,the original case only permit taking one disk once,but it does't conflact with the step e and f,e and f is the situation we need implement but the mothed we use.The mothed is very simple,anyone can see directly,we image the situation first ,here the mothed is not the point

4,let the stack store the opration but not your head

5,用递归证明可以实现,用反证证明只有一种方式

Hanoi T note的更多相关文章

  1. Codeforces777E. Hanoi Factory 2017-05-04 18:10 42人阅读 评论(0) 收藏

    E. Hanoi Factory time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  2. Python学习札记(十四) Function4 递归函数 & Hanoi Tower

    reference:递归函数 Note 1.在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. eg.计算阶乘: #!/usr/bin/env python3 def ...

  3. codeforces-777E Hanoi Factory (栈+贪心)

    题目传送门 题目大意: 现在一共有N个零件,如果存在:bi>=bj&&bj>ai的两个零件i,j,那么此时我们就可以将零件j放在零件i上.我们现在要组成一个大零件,使得高度 ...

  4. poj 1920 Towers of Hanoi

    Towers of Hanoi Time Limit: 3000MS   Memory Limit: 16000K Total Submissions: 2213   Accepted: 986 Ca ...

  5. zoj 2954 Hanoi Tower

    Hanoi Tower Time Limit: 2 Seconds Memory Limit: 65536 KB You all must know the puzzle named "Th ...

  6. Codeforces 777E:Hanoi Factory(贪心)

    Of course you have heard the famous task about Hanoi Towers, but did you know that there is a specia ...

  7. 三星Note 7停产,原来是吃了流程的亏

    三星Note 7发售两个月即成为全球噩梦,从首炸到传言停产仅仅47天.所谓"屋漏偏逢连天雨",相比华为.小米等品牌对其全球市场的挤压.侵蚀,Galaxy Note 7爆炸事件这场连 ...

  8. 《Note --- Unreal --- MemPro (CONTINUE... ...)》

    Mem pro 是一个主要集成内存泄露检测的工具,其具有自身的源码和GUI,在GUI中利用"Launch" button进行加载自己待检测的application,目前支持的平台为 ...

  9. 《Note --- Unreal 4 --- Sample analyze --- StrategyGame(continue...)》

    ---------------------------------------------------------------------------------------------------- ...

随机推荐

  1. 尝试使用word发布博客

    尝试使用WORD2010发布博客   使用博客园博客的主要原因在于能够使用live writer,不用每次都打开网页,当然博客园的大牛很多   如果可以使用方法word,当让更爽,格式的问题将不再是问 ...

  2. WPF 最大化最小化窗口

    public static void FullOrMin(this Window window)        {            //如果是全屏,则最小化            if (win ...

  3. ContentType Office

    Office对应ContentType 当从浏览器返回一个文件时,需要指定ContentType,以下是Office2007对应的值: "application/vnd.openxmlfor ...

  4. jdbc 日期时间相关的类型

    jdbc 日期时间相关的类型 1.sql.Date sql包中的日期类Date是util包中Date类的子类,实际上也是util.Date类的子集.它只处理年月日,而忽略小时和分秒,用以代表SQL的D ...

  5. 三 mybatis typeAlias(别名)使用和resultMap使用

     1.MyBatis提供的typeAlias

  6. Excel VBA

    =COUNTIF(Y3:Y212,"=11") =SUMIF(Y3:Y212,"=11",AA3:AA212) =SUMPRODUCT((Y3:Y212=&qu ...

  7. LinQ总结

    不管是在Mvc还是在别的架构中的项目LinQ和Lambda总是经常会遇到的. 而有些LinQ的语法并不是很长用(我大部分用的是Lambda),所以有必要记录一下万一用到的时候我能很方便的找到我想找到的 ...

  8. MySQL- 锁(3)

    InnoDB在不同隔离级别下的一致性读及锁的差异 前面讲过,锁和多版本数据是InnoDB实现一致性读和ISO/ANSI SQL92隔离级别的手段,因此,在不同的隔离级别下,InnoDB处理SQL时采用 ...

  9. JS框架比较

    https://www.oschina.net/translate/comparison-of-js-frameworks这几个框架我都用过1. Ember 2.x已经没有script标签在页面里了, ...

  10. Kib Kb KB KIB 区别

    今天和同事聊了一下Kib Kb KB KIB这几个单位的含义及其区别,自己在网上也查了查资料,总结如下: Ki 和 K 只是数学单位 Ki = 1024 K  = 1000 这二者之间没有任何联系 B ...