网站大量收购独家精品文档,联系QQ:2885784924

8.3 贪心法解马踏棋盘.pdf

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
程序设计与问题求解 ——马踏棋盘(贪心法) 马踏棋盘问题  国际象棋棋盘是8*8的方格 ,现将 “马”放在任意指定的方格中 ,按照走棋规 则移动该棋子。要求每个方格只能进入一次 ,最终走遍棋盘64个方格  棋盘可用一个矩阵表示 ,当 “马”位于棋盘上某一位置时 ,它就有一个唯一的 坐标。根据规则 ,如果当前坐标是(x,y) ,那么它的下一跳可能有8个位置 ,分 别是(x+2,y-1)、(x+2,y+1)、(x+1,y+2)、(x-1,y+2)、(x-2,y+1)、(x-2,y-1)、 (x-1,y-2)、(x+1,y-2) 。当然坐标不能越界 x y 马踏棋盘问题  马最初的位置标为1 ,它的下一跳的位置标为2 ,再下一跳的位置标为3 , 依次类推 ,如果马走完棋盘 ,那么最后在棋盘上标的位置是64  要求编程解决马踏棋盘问题 ,最后输出一个8*8的矩阵 ,并用数字1-64 来标注 “马”的移动 马踏棋盘问题 基本解法:深度优先搜索 从某位置出发,先试探下一个可能位置;进入一个新位置后就从该位置进一 步试探下一位置,若遇到不可行位置则回退一步,然后再试探其他可能位置 马踏棋盘——深度优先搜索求解  可以用8*8数组 chess[][] 存储棋子周游状态,未走过位置赋0 ,走过的位置 依次为1、2、3、……。设(x,y)为当前位置,j 为当前走到第几步 // 深度优先搜索求解核心代码 bool Dfs(int chess[][8], int x, int y, int j) { chess[x][y] = j; //将新的一步标注到矩阵中 if (j == 64) return true; //成功!依次回退结束程序 计算下一可能位置(nextX, nextY); //不考虑是否可行 while ( (nextX, nextY)位置是否可行 ) { if (Dfs(chess, nextX, nextY, j+1)) //递归调用,将进入新位置 return true; 计算下一可能位置(nextX, nextY); } chess[x][y] = 0; //这一步不可走,回退 return false; } 马踏棋盘——深度优先搜索  深度优先搜索求解,相当于在类似下面的树中查询 位置(x, y) 下一步 L 1 L2 … L8 再下一 a1 … a4 b1 … b3 c1 … c5 步 … … … … … … 至此已不满 足约束条件 马踏棋盘——深度优先搜索 + 贪心法优化  从(x,y)开始,深度优先搜索会依次查询L1、L2、……、L8一共8个可能位置  如何加入贪心策略? 位置(x, y) 先试探哪一个位置, ? ? ? 更可能得到答案呢 ? 下一步 L 1 L2 … L8 再下一 a1 … a4 b1 … b3 c1 … c5 步

文档评论(0)

恬淡虚无 + 关注
实名认证
内容提供者

学高为师,身正为范.师者,传道授业解惑也。做一个有理想,有道德,有思想,有文化,有信念的人。 学无止境:活到老,学到老!有缘学习更多关注桃报:奉献教育,点店铺。

1亿VIP精品文档

相关文档