10122157项镇敏实验6跳马问题ok.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
10122157项镇敏实验6跳马问题ok

《算法设计与分析实验》 实验报告 实验指导教师 沈云付 学生姓名 项镇敏 学号 序号 1 实验时间 周三7-9节课 上海大学计算机工程与科学学院 2016年11月3日 实验六、跳马问题 问题描述: 给定8*8方格棋盘, 实验目的: 求棋盘上一只马从一个位置到达另一位置的最短路径长。 算法思想: 1.简单分析,说明原理或方法 依旧是最短路径问题,不过此问题用回溯法来求解释比较好的。如下: 一只马在棋盘的某一点,它可以朝8个方向前进,方向向量分别是:(2,1)、(2,-1)、(1,2)、(1,-2)、(-2,1)、(-2,-1)、(-1,2)、(-1,-2)。从中任选择一个方向前进,到达新的位置。在从新的位置选择一个方向前进,继续,直到无法前进为止。无法前进可能有如下原因:下一位置超出边界、下一位置已经被访问过。当马已经无法前进时,就回退到上一位置,从新选择一个新的方向前进;如果还是无法前进,就再回退到上一位置…… 算法复杂度分析: 在任何时刻,回溯算法只保存从根结点到当前扩展结点的路径。如果解空间树中从根结点到叶结点的最长路径的长度为h(n),则回溯法所需的计算空间通常为O(h(n))。而显式地存储整个解空间则需要O(2h(n))或O(h(n)!)内存空间。 2.给出能正确运行的程序: 程序代码见附录。 以下是输入输出要求以及实验结果截图: 输入要求: 输入有若干测试数据。 每组测试数据仅1行,每行上有2个方格pos1、pos2,之间用一个空格隔开,每格方格表示棋盘上的一个位置,该位置由表示列的1个字母(a-h)及表示行的一个数字(1-8)构成,如“d7”表示第4列第7行。 输出要求: 对输入中每行上的2个方格pos1、pos2,输出马从位置pos1跳到pos2所需的最短路径长。如“a1==a2: 3 moves”表示从位置a1跳到a2所需的最少步数是3。 注意:按输出样例所示格式输出,如“a1==a2: 3 moves”中冒号后有一个空格,再跟着所需的最少步数。 实验结果 实验报告要求: 3.设计、调试中的问题及实验体会。 回溯法,我们要知道回溯法的基本思想,以及生成问题的基本方法。在一般情况下,用递归回溯法求解问题比较好。 附录: #includeiostream using namespace std; class stack{ private: int a[100],b[100]; int posx; public: stack():posx(0){} void push(int x,int y){ a[posx]=x; b[posx]=y; posx++; } void pop(int x,int y){ posx--; x=a[posx]; y=b[posx]; } bool empty() { if(posx==0) return true; else return false; } }; void jump(int row,int col,int a[8][8]) { int r,c; a[row][col]=0; r=row; c=col; stack st; st.push(r,c); while(!st.empty()) { st.pop(r,c); //左上角 if(r0 c1 a[r-1][c-2]==-1){ a[r-1][c-2]=a[r][c]+1; st.push(r-1,c-2); } else if(r0 c1 a[r-1][c-2]a[r][c]+1){ a[r-1][c-2]=a[r][c]+1; st.push(r-1,c-2); } if(r1 c0 a[r-2][c-1]==-1){ a[r-2][c-1]=a[r][c]+1; st.push(r-2,c-1); } else if(r1 c0 a[r-2][c-1]a[r][c]+1){ a[r-2][c-1]=a[r][c]+1; st.push(r-2,c-1); } //右上角 if(r0 c6 a[r-1][c+2]==-1){ a[r-1][c+2]=a[r][c]+1; st.push(r-1,c+2); } else if(r0 c

文档评论(0)

jiupshaieuk12 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档