[js - 算法可视化] 汉诺塔(Hanoi)演示程序
前段时间偶然看到有个日本人很早之前写了js的多种排序程序,使用js+html实现的排序动画,效果非常好。
受此启发,我决定写几个js的算法动画,第一个就用汉诺塔。
演示地址:http://tut.ap01.aws.af.cm/visual/hanoi.htm
代码:http://tut.ap01.aws.af.cm/js/hanoi.js
下图为演示界面:
在写界面的时候,才真正理解css中position的用法,之前知道含义,但是不知道搭配的用法。
position用法:外层使用relative,内层使用absolute,这样内层的absolute对象都可以使用top,left和外层进行相对定位。
另外在这个程序里面,实现了一点,就是顺序动画,这一点很重要(同时,因为我对jquery的顺序不熟悉,希望有人可以告诉我怎么用jquery实现)。
1.jquery中,通常都是针对同一个对象,进行不同的动画。
2.针对不同对象的动画会在同一时间开始执行。
3.针对不同对象的动画,可以用jquery的完成函数实现。
上面第3点,在对象很少,执行步骤很少的时候(大概<4可以接受)可以考虑,但是如果是大量的动画,那就很不合适了。
我的解决办法是,有一个对象来记录动画状态,然后使用一个数组来记录全部的状态。
最后使用setTimeout来定期从数组执行动画。
使用这种方法实现了盘子的顺序移动,移动过程中需要计算盘子的运动路径。
如果两个盘子挨着,不需要考虑中间的位置,如果两个盘子隔着一个,就需要考虑中间的位置。
通过判断高度,最后确定盘子的路径,盘子有左移、右移、上移、下移四种操作,每条路径根据具体情况分解为这四种操作。
关于上面jquery的顺序移动,如果没有jquery自身可以实现的方法,我就考虑如何写个插件来实现这个功能。
[js - 算法可视化] 汉诺塔(Hanoi)演示程序的更多相关文章
- what' the python之递归函数、二分算法与汉诺塔游戏
what's the 递归? 递归函数的定义:在函数里可以再调用函数,如果这个调用的函数是函数本身,那么就形成了一个递归函数. 递归的最大深度为997,这个是程序强制定义的,997完全可以满足一般情况 ...
- js模拟栈---汉诺塔
var Stack = (function(){ var items = new WeakMap(); //先入后出,后入先出 class Stack{ constructor(){ items.se ...
- 汉诺塔-Hanoi
1. 问题来源: 汉诺塔(河内塔)问题是印度的一个古老的传说. 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵 ...
- 汉诺塔 Hanoi Tower
电影<猩球崛起>刚开始的时候,年轻的Caesar在玩一种很有意思的游戏,就是汉诺塔...... 汉诺塔源自一个古老的印度传说:在世界的中心贝拿勒斯的圣庙里,一块黄铜板上插着三支宝石针.印度 ...
- 汉诺塔hanoi
问题描述: 有一个梵塔,塔内有三个座A.B.C,A座上有诺干个盘子,盘子大小不等,大的在下,小的在上(如图). 把这些个盘子从A座移到C座,中间可以借用B座但每次只能允许移动一个盘子,并且在移动过程中 ...
- js递归解决汉诺塔问题
汉诺塔是一个印度的古老传说.有三个圆柱,其中一个圆柱上放着若干圆盘,这些圆盘从上到下,直径递增,利用一个辅助圆柱,将原来柱子上的圆盘放到另一个柱子上,依旧是从上到下直径递增. 汉诺塔是一个经典的递归案 ...
- 关于C语言解决汉诺塔(hanoi)问题
C语言解决汉诺塔问题 汉诺塔是典型的递归调用问题: hanoi简介:印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔.不论白天黑夜,总有一个僧侣 ...
- 算法:汉诺塔问题(Tower of Brahma puzzle)
一.算法背景 最早发明这个问题的人是法国数学家爱德华·卢卡斯.传说越南河内某间寺院有三根银棒(A, B, C),上串 64 个金盘. 寺院里的僧侣依照一个古老的预言,以上述规则移动这些盘子:预言说当这 ...
- 1.python算法之汉诺塔
代码如下: #!/usr/bin/env python # encoding: utf-8 """ @author: 侠之大者kamil @file: 汉诺塔.py @t ...
随机推荐
- MFC CListCtrl得到ctrl,shift多选的行号
vector<int> selVect; int count = m_consumeList.GetItemCount(); //你的列表多少行 for (int i = 0; i< ...
- leetcode Binary Search Tree Iterator python
# Definition for a binary tree node # class TreeNode(object): # def __init__(self, x): # self.val = ...
- python-摩斯码转换
意义:简单实现摩斯码的破译和生成 代码: #-*- coding: UTF-8 -*- ' __date__ = '2016/2/2' import pprint import re chars = ...
- python之字符串格式化(format)
用法: 它通过{}和:来代替传统%方式 1.使用位置参数 要点:从以下例子可以看出位置参数不受顺序约束,且可以为{},只要format里有相对应的参数值即可,参数索引从0开,传入位置参数列表可用*列表 ...
- windows常用环境变量
%ALLUSERSPROFILE%列出所有用户Profile文件位置. %APPDATA%列出应用程序数据的默认存放位置. %CD%列出当前目录. %CLIENTNAME%列出联接到终端服务会话时客户 ...
- System.DateTime的一些格式
//2008年4月24日 System.DateTime.Now.ToString("D"); //2008-4-24 System.DateTime.Now.To ...
- 车间任务不允许"每个装配件"超过100000
应用 Oracle Work in Progress 层 Level Function 函数名 Funcgtion Name WIP_WIPMRMDF 表单名 Form Name WIPMRMDF ...
- 搭建Android开发环境之——Android4.0.3, 4.1, 4.2, 4.3, 4.x,及升级 ADT(22.0.5)和SDK(22.x)
1.首先要下载相关的软件 1). JDK 6 以上 2). eclipse( Version 3.6.2 or higher ) 点击下载 3). SDK(android-sdk_r18-windo ...
- Cortex-M3学习日志(四) -- UART0实验
LPC1768含有4 个符合16C550工业标准的异步串口UATR0-UART3,其中UART1具有标准的MODEM接口和RS-485/EIA-485接口模式.串口通讯接口是连接计算机.终端.通讯控制 ...
- poj2000---和1969一样的模板
#include <stdio.h> #include <stdlib.h> int main() { int d; while(scanf("%d",&a ...