问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

棋盘覆盖问题的算法实现

发布网友 发布时间:2022-04-23 03:37

我来回答

2个回答

懂视网 时间:2022-04-23 07:58

这次给大家带来JS实现棋盘覆盖,JS实现棋盘覆盖的注意事项有哪些,下面就是实战案例,一起来看一下。

之前做了一个算法作业,叫做棋盘覆盖,本来需要用c语言来编写的,但是因为我的c语言是半桶水(哈哈),所以索性就把网上的c语言写法改成JavaScript写法,并且把它的覆盖效果显示出来

<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type"content="text/html; charset=utf-8"/>
<title>算法作业2</title>
<style type="text/css">
 #num{}
 #chess{
 margin-top:20px;
 }
</style>
</head>
<body>
 <p id="num">
 <p>设置棋盘大小:
 <input type="text"name="Num"size="4"/>
 </p>
 <p>请输入特殊方格的位置:</p>
 <p>
 x:<input type="text"name="X"size="25"/><br />
 y:<input type="text"name="Y"size="25"/>
 </p>
 <p>
 <input type="button"value="设置棋盘参数"/>
 <input type="button"value="生成棋盘"/>
 </p>
 </p>
 <p id="chess">
 </p>
</body>
</html>
<script type="text/javascript">
 window.onload=function()
 {//棋盘设置
 varchess=document.getElementById('chess');
 varinput=document.getElementsByTagName('input')[3];
 input.onclick=function()
 {
 varN=document.getElementsByTagName('input')[0].value;
 vartable=document.createElement('table');
 chess.appendChild(table);
 table.style.border='2px solid';
 table.style.borderCollapse='collapse';
 for(vari=0;i<N;i++)
 {
 vartr=document.createElement('tr');
 table.appendChild(tr);
 tr.style.height ="20px";
 tr.style.border='1px solid #ccc';
 for(varj=0;j<N;j++)
 {
  vartd=document.createElement('td');
  tr.appendChild(td);
  td.style.width ="20px";
  td.style.border='1px solid #ccc';
 }
 } 
 }
 varOut=document.getElementsByTagName('input')[4];
 varMatrix =newArray(); 
 for(vari=0;i<100; i++)
 {//初始化棋盘矩阵
 Matrix[i] =newArray(); 
 for(varj=0;j<100;j++)
 {
  Matrix[i][j]=0;
 }
 }
 Out.onclick=function()
 {//棋盘生成
 varr,c;
 varX=document.getElementsByTagName('input')[1].value;
 varY=document.getElementsByTagName('input')[2].value;
 varN=document.getElementsByTagName('input')[0].value;
 chessBoard(0,0,X-1,Y-1,N);
 for(r = 0; r < N; r++)
 {
 for(c = 0; c < N; c++)
 {
  varq=Matrix[r][c];
  vartable=document.getElementsByTagName('table')[0];
  table.rows[r].cells[c].style.background='rgb('+13*q%256+','+43*q%256+','+73*q%256+')';
 }
 }
 }
 varnCount = 0;
 functionchessBoard(tr,tc,dr,dc,size)
 {
 vars,t;
 if(size == 1)return;
 s =size/2;
 t = ++nCount ;
 if(dr < tr + s && dc < tc +s)
 chessBoard(tr,tc,dr,dc,s);
 else
 {
 Matrix[tr+s-1][tc+s-1] = t;
 chessBoard(tr,tc,tr+s-1,tc+s-1,s);
 }
 if(dr < tr + s && dc >= tc + s )
 chessBoard(tr,tc+s,dr,dc,s);
 else
 {
 Matrix[tr+s-1][tc+s] = t;
 chessBoard(tr,tc+s,tr+s-1,tc+s,s);
 }
 if(dr >= tr + s && dc < tc + s)
 chessBoard(tr+s,tc,dr,dc,s);
 else
 {
 Matrix[tr+s][tc+s-1] = t;
 chessBoard(tr+s,tc,tr+s,tc+s-1,s);
 }
 if(dr >= tr + s && dc >= tc + s)
 chessBoard(tr+s,tc+s,dr,dc,s);
 else
 {
 Matrix[tr+s][tc+s] = t;
 chessBoard(tr+s,tc+s,tr+s,tc+s,s);
 }
 }
 }
</script>

棋盘覆盖的C语言代码我是参考课本的,为了能够把它用进JavaScript里面,突破口就是二维数组Matrix[][],只要能够获得它计算之后整个数组的数据,那么就有思路了。要记住填写进表单里面的数据是在点击按钮之后才获取的,所以获取元素节点的代码要放在onclick里面。

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

js寄生组合式继承使用详解

react-router4.0实现重定向与404功能

热心网友 时间:2022-04-23 05:06

下面讨论棋盘覆盖问题中数据结构的设计。
(1)棋盘:可以用一个二维数组board[size][size]表示一个棋盘,其中,size=2^k。为了在递归处理的过程中使用同一个棋盘,将数组board设为全局变量;
(2)子棋盘:整个棋盘用二维数组board[size][size]表示,其中的子棋盘由棋盘左上角的下标tr、tc和棋盘大小s表示;
(3)特殊方格:用board[dr][dc]表示特殊方格,dr和dc是该特殊方格在二维数组board中的下标;
(4) L型骨牌:一个2^k×2^k的棋盘中有一个特殊方格,所以,用到L型骨牌的个数为(4^k-1)/3,将所有L型骨牌从1开始连续编号,用一个全局变量t表示。
设全局变量t已初始化为0,分治法求解棋盘覆盖问题的算法用C++语言描述如下:
void ChessBoard(int tr, int tc, int dr, int dc, int size)
{
int s, t1; //t1表示本次覆盖所用L型骨牌的编号
if (size == 1) return; //棋盘只有一个方格且是特殊方格
t1 = ++t; // L型骨牌编号
s = size/2; // 划分棋盘
if (dr < tr + s && dc < tc + s) //特殊方格在左上角子棋盘中
ChessBoard(tr, tc, dr, dc, s); //递归处理子棋盘
else{ //用 t1号L型骨牌覆盖右下角,再递归处理子棋盘
board[tr + s - 1][tc + s - 1] = t1;
ChessBoard(tr, tc, tr+s-1, tc+s-1, s);
}
if (dr < tr + s && dc >= tc + s) //特殊方格在右上角子棋盘中
ChessBoard(tr, tc+s, dr, dc, s); //递归处理子棋盘
else { //用 t1号L型骨牌覆盖左下角,再递归处理子棋盘
board[tr + s - 1][tc + s] = t1;
ChessBoard(tr, tc+s, tr+s-1, tc+s, s);
}
if (dr >= tr + s && dc < tc + s) //特殊方格在左下角子棋盘中
ChessBoard(tr+s, tc, dr, dc, s); //递归处理子棋盘
else { //用 t1号L型骨牌覆盖右上角,再递归处理子棋盘
board[tr + s][tc + s - 1] = t1;
ChessBoard(tr+s, tc, tr+s, tc+s-1, s);
}
if (dr >= tr + s && dc >= tc + s) //特殊方格在右下角子棋盘中
ChessBoard(tr+s, tc+s, dr, dc, s); //递归处理子棋盘
else { //用 t1号L型骨牌覆盖左上角,再递归处理子棋盘
board[tr + s][tc + s] = t1;
ChessBoard(tr+s, tc+s, tr+s, tc+s, s);
}
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
说课包括哪些方面 说课内容包括()。 如何在手机百度上删除对话记录? 结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 女人相思入骨的四个表现是什么? 一个真正疯狂想你的女人,一般会给你哪些“信号”? 当一个女人想念你,不会说想你,会发出什么信号? 中年女人会用什么方式表示她想你? 女人“发疯”般想你的时候,会有什么样的冲动表现呢? 网站建设哪个好 请问在苏州有没有人知道比较好的网站建设的公司? 用电脑登录新浪微博访问别人的微博,会在自己的手机微博客户端上留下经常访问记录吗? 访问别人的微博会不会有访问记录? 在生活中一个女人有多想你,会做出什么表现? 当一个女人想你的时候,会有哪些表现? 如何就可以帮助学龄的超重孩子减肥? 女人越是思念你,哪几个表现越“频繁”? 怎么判断一个女人是不是真的想你?会有什么表现? 女人思念一个人时,都会有什么样的表现? 中年女人动了真情,会有哪几个表现? 中年女性想你的时候,会有所表现,她会跟你开什么玩笑? 安徽国家级贫困县有几个? 安徽利辛县怎么样? 中年女人想你到极致,才有的哪种“提示”? 爱美的妹子都要知道!如何根据脸型选择合适自己的眉形呢? 什么脸型配什么眉毛 眉形是根据自身的脸型、五官、气质决定的,圆脸适合什么眉形? 月光六便士是必读书本吗 如何鉴别真鳄鱼表带和假鳄鱼表带 北京办理工作居住证条件 普通电脑因为缺少无线网卡而不能连接wifi 求帮助:棋盘覆盖问题java语言如何实现结果一步步显示? 求一套表情包遇见你真倒霉因为我再也离不开你了,谢谢大佬&#xF64F; 知道 百度 谁能告我我这个表情包叫啥来着。谢谢了。 真的太想要贤的QQ表情包了,太可爱了!可找不到,呜呜~~~那位好心的贤饭给我发一下,大恩不言谢,跪求了 求这系列表情的出自和表情包 谢谢 小区二次转供电收费违法吗? 物业公司二次供电收费的依据是什么? 宜昌转供电收费标准 棋盘覆盖问题的算法可以采用什么设计来实现 常德物价局关于二次供电电费的文件 宁乡市发改委关于转供电价格规定 如何将一个上的聊天记录共享给另一个? 红米1s怎样躲避4g信号屏蔽器