经典汉诺塔问题分析 – 多反思,多回顾,要坚持。

   188备用网址

成绩提供消息的人:汉诺塔提供消息的人于印度移交的一体制图,膜拜大发牢骚世界时创造了三颗金刚石柱。,64列金盘上下桩。。膜拜命令Brahman从上面重行打扮圆盘并把它放在另一张上。。并价格稳定,圆盘不克不及在小圆盘上缩小。,在三列私下,每回后果却酒一体磁盘。,后果却在磁盘顶部酒。有预告说,当这样地做的时分,宇宙会霎时昙花一现。。人民还信任印度产的牛一向在酒圆盘。。恩,自然,大约移交是未必相当。,当今汉诺塔更多的是作为一体玩意儿在。

如今在第一列上桩有N个上下的盘。,要把这些圆盘整个酒到第三根柱子要怎样酒呢?请找出需求靠近数最少的阴谋

因而我们的可以把成绩的观念化扮演为:N板3柱:A(提供消息的人)、B(备用)、C(目的),盘子的体积确切的,定中心有个洞。,你可以把盘子放在柱子上。,每个板后果却评价在比它大的板上。。后来,所相当盘子都在A柱上。,成绩是把盘子从一体柱子一体一体地移到C柱上。。在酒课程中,可以应用B列,除了盘子后果却放在比它大的盘子里。。

相应地我们的区域汉诺塔成绩的以下数个限度局限养护:

1.圆盘不克不及在小圆盘上缩小。。

2.在三列私下,每回后果却酒一体磁盘。。

3.后果却在磁盘顶部酒。

率先,我们的从一体复杂的容器开端,与总结了通例。。

当n = 在1岁的时分,就是,大约时分只要一体盘子,与直线部分酒到C。体育课程是
A -> C

当n = 在2岁的时分,大约时分有两个盘子,因而当它开端酒时,我们的需求用B柱作为过渡的脊椎。,将列的顶部酒到B列,与将A柱上面的圆盘移到C柱上。,充分地,将B列的磁盘酒到C列。。这么装满的体育课程是A
-> B , A -> C , B -> C

当n = 在3岁的时分,与,上下,从大到小的三个圆盘是PL。,由于机身的约束:圆盘不克不及在小圆盘上缩小。,在将磁盘从A列酒到C列以后的,C列的驻扎军队与A列的驻扎军队完全类似于。。这么呢?,每次我们的酒到C列的磁盘上(酒到C列后),我们的就会酒到C列。,它必需是从大到小。,在整天的开端,我们的理所当然想法把最大的磁盘移到C列上。,与想办法把居第二位的个大圆盘移到C柱上……和代表,直到所相当激光唱片本着在前的的A C酒到C列。。

因而本着这种思想方法,成绩就来了。:

你怎样能把最大的盘子移到C柱上?

因而我们的从成绩开端,把最大的板移到C柱上,相应地,效劳去除A柱上覆的的N-1板。,C列作为目的列开端。,因而我们的可以用B柱作为”暂存”这n-1个盘子的过渡柱,当N-1板酒到B柱时,我们的可以将A柱的贱的酒到C列。。

下一体成绩是什么?

如今我们的来看一眼每一列的盘子。,柱上无板,B柱上下评价在N-1菜肴中,从小到大。,最大的板评价在C柱上。。

因而下一体成绩是不言而喻的。,那就是要把B柱这剩的n-1个盘子移至C柱,B柱用作过渡柱。,因而我们的需求应用A列,列被用作一体新的过渡列。,把N-1板移到C柱上。

依据上级的剖析,我们的可以分离地区域这样地的结局。:

汉诺塔功能蓝本:

void Hanio(int n,char start_pos,char tran_pos,char end_pos)

与我们的可以将n个板从A列酒到C列。:

Hanio(n,A,B,C);

因而从上级的剖析:

大约成绩可以决定成一体忽然的成绩。:

第一步:将N-1板块从柱酒到B柱(以C柱为过渡柱)

居第二位的步:将最大的板在A列下酒到C列

第三步:B柱的N-1板块酒到C柱(柱状)。

因而装满的的加密如次所示:

#include
int i;    //记载步数
我表现要走的靠近数。,将编号为n的板从列酒到列(目的COLU)
void 酒(int) n,char from,char 到)
    printf("第%d步:将%d号盘子%c---->%c\n",i++,n,from,到)
}

//汉诺塔反复功能
n表现从起首列向目的PO酒的盘数。
StestPixPOS表现起首列,TurnPOS表现过渡列,EndoPOS表现目的列
void Hanio(int n,char start_pos,char tran_pos,char end_pos){
    if(n==1){    //很明显,当n==在1岁的时分,我们的只需求将激光唱片直线部分从起首柱酒到目的。
        酒(n),start_pos,end_pos);
    }
    else{
        Hanio(n-1,start_pos,end_pos,tran_pos);   //反复处置,在整天的开端,率先将N-1板移到过渡柱上
        酒(n),start_pos,end_pos);                与将底部直线部分酒到目的柱上。
        Hanio(n-1,tran_pos,start_pos,end_pos);    与反复上级的靠近,过渡柱上N-1板块的反复处置
                                                  此刻,在前的的起首列用作过渡列。
    }
}
int main(){
    int n;
    (SnF)(%d),&n)==1&&n){
        i = 1;   全程变量的基础资料
        Hanio(n,''1'',''2'',''3'');
        Printf:靠近的终极总额是%D\n,I-1)
    }
    return 0;
}


我们的也可以从运转中找出后果。:N板,体育的步长总额为2 ^ n。 – 1

体验:反复成绩是一体分离成绩。,由于人脑的堆叠是有受限制的的,想不到的的发生,因而我们的只需求特别指出后面的容器,与找寻价格稳定。当n值增添时,最好的复杂水平的曾经变老了,确实,功能的反复转乘是类似于的。。生活舒适,或许有整天我能拘押。

即使有违法,请修正。,哦致谢

没有评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注