首页 > 其他 > 详细

汉诺塔算法演示1.0

时间:2014-07-16 20:57:23      阅读:376      评论:0      收藏:0      [点我收藏+]

  工作之余闲来无聊,于是就有了用JS来实现算法演示的想法,很久以前用JS实现过选择排序,不过源程序找不到了!

  汉诺塔的递归算法:

void move(int n,char a,char b,char c)
{
    if(n==1)
        printf("\t%c->%c\n",a,c);    //当n只有1个的时候直接从a移动到c
    else
    {
        move(n-1,a,c,b);            //第n-1个要从a通过c移动到b
        printf("\t%c->%c\n",a,c);
        move(n-1,b,a,c);            //n-1个移动过来之后b变开始盘,b通过a移动到c,这边很难理解
    }
}

  在上面的递归算法中,printf函数可以换成我们JS的动画处理函数。我也是受到了其他人写的汉诺塔算法演示的启发:先在算法执行完成以后, 才开始执行动画效果。

  【演示地址

  汉诺塔算法的js地址:【hnt.js

 

  在init()这个方法里我们可以看

// 初始化
Hnt.init = function(opt){
    $("#block").html(‘‘);

    Hnt.movie = [];

    Hnt.options = $.extend(Hnt.options, opt);
    Hnt.A.num    = Hnt.options.n;
    Hnt.B.num    = 0;
    Hnt.C.num    = 0;

    Hnt.initBlock(Hnt.options.n);
    Hnt.move(Hnt.options.n, "A", "B", "C");
    Hnt.start();
}

  前半部分是将使用到变量重新初始化。

  后半部分:

  initBlock();  // 初始化盘子

  move();    // 汉诺塔算法的执行,仅仅是执行算法,在这个过程中保存盘子移动的路径,但是不执行动画

  start();      // 执行动画效果。

 

  ======================================================

  后话:现在仅仅是用js简单地实现了汉诺塔的演示过程,下一步打算从流程上和界面上进行优化,也希望能够学习一些其他的东西。比如:html5的dnd,audio,woker,localstorage,还有jQueryMobile的框架

汉诺塔算法演示1.0,布布扣,bubuko.com

汉诺塔算法演示1.0

原文:http://www.cnblogs.com/xumengxuan/p/3835604.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!