首页 > 代码库 > 汉诺塔算法演示1.0
汉诺塔算法演示1.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的框架
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。