- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
骑士漫游问题
问题描述:国际象棋中骑士按L形进行跳跃,在8*8的棋盘上找到一条路径,从某起始位置出发,不经过重复的格,走遍棋盘上的所有格。
需求分析:
棋盘N*N个格子,由于要不重复路线,所以每个格子要有个标记来表明起已经/未被访问过,故可以一个二维布尔组模拟棋盘。
棋子有属性当前位置,可以用两个整数表示当前位置。跳跃方式,根据国际象棋规则,骑士有8个方向可以跳跃,若当前位置是(x,y),则其可跳跃格为(x 1,y 2)和(x 2,y 1),用0—7的编号代表其中一种跳跃方式。
概要设计:采用尝试回溯的方法寻找路径。用一个N*N长度的栈保存路径。起始位置进栈,从当前位置出发,即栈顶元素位置,依顺序像八个方向进行试探,若试探方向未被访问且没有越界,则跳跃到此格,此位置进栈,继续进行试探,直到走完怎么棋盘为止。若八个方向均不能跳跃,则当前位置出栈,退回上一步,寻找新的方向继续进行尝试。已走完整个棋盘的条件为栈满,即栈内的元素个数等于栈长度。若栈为空,则说明无可行路径走完棋盘。
对此进行进一步讨论,此方法存在大量回溯,时间代价非常大,在8*8的棋盘上很可能在可容忍的时间类无法找到路径,所以对起进行优化。考虑棋盘,直观的,按骑士走法,中间最容易被访问,边角最难以访问到。进一步考虑棋盘每一格,按骑士走法,能访问到此格的上一格的个数是不同的,把能访问此格的上一格的个数之和称为每格的访问能力。所以优化方法为:尽量先访问访问能力低的格子。为此给棋盘添加一个N*N的二维数组,表示每格的访问能力值。给棋子添加一个8长度的数组,用来表示优先访问顺序。计算每格的访问能力算法:从棋盘上的每格出发,向八个方向进行尝试,若没有超出边界,则此格访问能力加1。优先访问顺序算法:重当前位置想八个方向试探,记录八个位置,比较访问能力数组,找到八个位置的访问能力,若越界,则需要最后访问,所以访问能力可以设为9,最后对八个位置按访问能力进行排序,得到优先访问顺序。
程序代码如下:
------------------------------华丽丽的分割线-------------------------
public class SeqStackE { //用到的顺序栈类
private Object value[];
private int top;
private int length; //栈内元素个数
public SeqStack(int capacity) {
value=new Object[capacity];
top=-1;
length=0;
}
public boolean isEmpty(){
return this.top==-1;
}
public boolean push(E element){
if(element==null)
return false;
top ;
value[top]=element;
length ;
return true;
}
public E pop(){
if(!isEmpty()){
E temp=(E)value[top];
value[top]=null;
top--;
length--;
return temp;
}
else
return null;
}
public E get(){
if(!isEmpty())
return (E)value[top];
else
return null;
}
public int length(){
return this.length;
}
public int valueLength(){
return this.value.length;
}
}
------------------------------华丽丽的分割线-------------------------
public class Knight { //骑士棋子
您可能关注的文档
- 敬酒的学问大了.docx
- 举重成绩与体重的关系.docx
- 开关插座高度.docx
- 可见光的相关光学知识和术语.docx
- 空气压缩机问题汇总.docx
- 口译记忆方法.docx
- 快递知识普及.docx
- 理解群体与团体.docx
- 廉价机票注意问题.docx
- 炼铁工-解释题131.docx
- 毕业实习心得体会.doc
- 2025年浙江台州科技职业学院招聘教师7人笔试模拟试题含答案详解.docx
- 2025年 安徽淮南经济技术中等专业学校招聘考试试卷[附答案].docx
- 中国农业电影电视中心2024年度面向社会公开招聘事业编制工作人员笔试模拟试题参考答案详解.docx
- 2025上半年四川自贡大安区部分事业单位选调12人笔试模拟试题带答案详解.docx
- 2025年河北衡水职业技术学院招聘人事代理工作人员25人笔试模拟试题附答案详解.docx
- 2025年内蒙古鄂尔多斯市康巴什区事业单位高层次人才和紧缺专业人才引进29人笔试模拟试题及参考答案详.docx
- 2024年黑龙江省气象部门招聘笔试备考题库附答案详解.docx
- 2025年浙江绍兴市直事业单位招聘100人笔试模拟试题附答案详解.docx
- 毕业实习工作总结.doc
文档评论(0)