JS算法与数据结构之八皇后(晕晕)
算法核心思想
回溯算法
递归实现
程序实现
坐标系
循环递归
回溯
计数
收集位置
特效添加
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
<style>
*{ margin:; padding:;}
li{ list-style:none;}
#ul1{ height:auto; margin:20px auto; overflow:hidden; border:1px #FFF solid; border-right:none; border-bottom:none; background-image:url(img/bg.jpg); background-size:cover;}
#ul1 li{ float:left; border:1px #FFF solid;border-left:none; border-top:none; background-size:cover;}
#ul1 li.active{ animation:.5s infinite linear flash; -webkit-animation:.5s infinite linear flash;}
@keyframes flash{
%{ opacity:0.1;}
%{ opacity:;}
%{ opacity:0.1;}
}
@-webkit-keyframes flash{
%{ opacity:0.1;}
%{ opacity:;}
%{ opacity:0.1;}
}
</style>
</head> <body>
<ul id="ul1">
</ul>
<script> var oUl = document.getElementById('ul1');
var aLi = oUl.getElementsByTagName('li');
var sizeGird = ;
var num = ;
var iCount = ;
var posArr = [];
var posArrAll = []; init(); function init(){
createGird();
setQueen();
//console.log( posArrAll );
showImg();
} function createGird(){
var len = num * num; oUl.style.width = num * (sizeGird + ) + 'px'; for(var i=;i<len;i++){
var oLi = document.createElement('li');
oLi.style.width = sizeGird + 'px';
oLi.style.height = sizeGird + 'px';
oLi.index = -;
//oLi.innerHTML = oLi.index;
oUl.appendChild(oLi);
} for(var i=;i<num;i++){
for(var j=;j<num;j++){
//i j num
aLi[ i*num + j ].x = j;
aLi[ i*num + j ].y = i;
//aLi[ i*num + j ].innerHTML = j + ',' + i;
}
}
} function setQueen(iQueen){ if( iQueen == num ){
posArrAll.push( posArr.concat() );
iCount++;
return;
} for(var i=;i<num;i++){ if( aLi[ iQueen*num + i ].index == - ){
aLi[ iQueen*num + i ].index = iQueen;
//aLi[ iQueen*num + i ].innerHTML = iQueen;
posArr.push(aLi[ iQueen*num + i ]);
var x = aLi[ iQueen*num + i ].x;
var y = aLi[ iQueen*num + i ].y; for(var j=;j<aLi.length;j++){
if( aLi[j].index == - && (aLi[j].x == x || aLi[j].y == y || aLi[j].x - aLi[j].y == x - y || aLi[j].x + aLi[j].y == x + y) ){
aLi[j].index = iQueen;
//aLi[j].innerHTML = iQueen;
}
} setQueen( iQueen + ); //回溯
posArr.pop();
for(var j=;j<aLi.length;j++){
if( aLi[j].index == iQueen ){
aLi[j].index = -;
}
} }
}
} function showImg(){ change();
setInterval(change,); function change(){ for(var i=;i<aLi.length;i++){
aLi[i].style.backgroundImage = '';
aLi[i].className = '';
} var randomLi = posArrAll[ Math.floor(posArrAll.length * Math.random()) ]; for(var i=;i<randomLi.length;i++){
randomLi[i].style.backgroundImage = 'url(img/'+ Math.floor((Math.random()* + )) +'.jpg)';
randomLi[i].className = 'active';
randomLi[i].style.animationDelay = -Math.random()* + 's';
randomLi[i].style.webkitAnimationDelay = -Math.random()* + 's';
} } } </script>
</body>
</html>
JS算法与数据结构之八皇后(晕晕)的更多相关文章
- js学习之数据结构和算法
js中的数据结构 1.列表 待办事项列表.购物清单.最佳十名榜单等等. 适用: 1)数据结构较为简单, 2)不需要在一个长序列中查找元素,或者对其进行排序 2.栈 一摞盘子 ----- 添加删除只能从 ...
- js的 算法 和 数据结构
js的 算法 1.对一个对象数组按照对象某个属性进行排序 : https://www.cnblogs.com/webcabana/p/7460038.html 在做公交的项目中就碰到过这种算法问题, ...
- js算法初窥03(简单搜索及去重算法)
前面我们了解了一些常用的排序算法,那么这篇文章我们来看看搜索算法的一些简单实现,我们先来介绍一个我们在实际工作中一定用到过的搜索算法--顺序搜索. 1.顺序搜索 其实顺序搜索十分简单,我们还是以第一篇 ...
- js算法初窥03(搜索及去重算法)
前面我们了解了一些常用的排序算法,那么这篇文章我们来看看搜索算法的一些简单实现,我们先来介绍一个我们在实际工作中一定用到过的搜索算法——顺序搜索. 1.顺序搜索 其实顺序搜索十分简单,我们还是以第一篇 ...
- 技术期刊 · 天光台高未百尺 | Uber 工程师的 JS 算法课;大数据时代的个人隐私;设计师的 Github;告别 PPT 工程师;从零开始实现的像素画
蒲公英 · JELLY技术期刊 Vol.42 这是一个最好的时代,多样化的平台给了所有人成长发展的机会,各种需求和解决需求的人让人大开眼界:但这也并不是完美的时代,"前端还需要懂什么算法?& ...
- 浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树
http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的 ...
- python 下的数据结构与算法---2:大O符号与常用算法和数据结构的复杂度速查表
目录: 一:大O记法 二:各函数高阶比较 三:常用算法和数据结构的复杂度速查表 四:常见的logn是怎么来的 一:大O记法 算法复杂度记法有很多种,其中最常用的就是Big O notation(大O记 ...
- LeetCode_算法及数据结构覆盖统计
[输入]共计151道题的算法&数据结构基础数据 (见附录A) [输出-算法]其中有算法记录的共计 97道 ,统计后 结果如下 top3(递归,动态规划,回溯) 递归 动态规划 回溯 BFS ...
- JavaScript算法与数据结构知识点记录
JavaScript算法与数据结构知识点记录 zhanweifu
随机推荐
- 第一个windows 小游戏 贪吃蛇
最近用dx尝试做了一个小的贪吃蛇游戏,代码放到github上面:https://github.com/nightwolf-chen/MyFreakout 说一下自己实现的过程: 首先,我把蛇这个抽象成 ...
- 搭建基于SSI(struts2,spring,ibatis)的javaEE开发环境
搭建基于SSI(struts2,spring,ibatis)的javaEE开发环境 最近有很多人不知道如何搭建基于SSI(struts2,spring,ibatis)的J2EE开发环境,这里给大家一个 ...
- 详解android的号码匹配
什么是号码匹配,个人理解,即判断两组号码是否属于同一个号码.在实际使用过程中,接触到的号码会涉及到区号,国家编码以及IP号码等,这个时候就用到了号码匹配.两个内容不一样的号码,如+86***和1795 ...
- 让C#、VB.NET实现复杂的二进制操作
VB.NET和C#属于高级语言,对二进制位操作的支持不是很好,比如没有了移位运算等,用的时候确实很不方便,所以在闲暇之余我重新封装了一个用于C#.VB.NET的位操作类库,通过该类库可以实现数据移位. ...
- MTD设备驱动
MTD(memory technology device):内存技术设备 是linux用于描述ROM,NAND,NOR等内存设备的子系统的抽象 MTD设备可以按块读写也可以按字节读写,也就是说MTD设 ...
- samba安装与配置
1.安装软件包rpm -q samba samba-common samba-client cifs-utilsyum -y install samba samba-common samba-clie ...
- linux服务器开发二(系统编程)--线程相关
线程概念 什么是线程 LWP:Light Weight Process,轻量级的进程,本质仍是进程(在Linux环境下). 进程:独立地址空间,拥有PCB. 线程:也有PCB,但没有独立的地址空间(共 ...
- 【Java每日一题】20170112
20170111问题解析请点击今日问题下方的"[Java每日一题]20170112"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...
- C#动态创建两个按钮,btn2复制btn1的Click事件,匿名委托
现在有一个按钮btn1,要动态创建出一个btn2,需要btn2点击时调用btn1的点击. 在delphi中这种操作很简单:btn2.onClick:=btn1.onClick,因为onClick就是个 ...
- svn用Cornerstone上传项目丢失静态库.a问题的解决
最近电脑重装系统后,装上Cornerstone上传项目后,发现又有丢失.a文件的问题,这里说一下解决办法,打开Preferences-->Subversion-->General,将Use ...