色子游戏问题.pptVIP

  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文档。上传文档
查看更多
色子游戏问题

色子游戏问题 数据输入: 由文件 input.txt 给出输入数据,输入数据的第一行为两个整数N 和M(1≤N,M≤ 100),以下N 行,每行包含M 个字符,字符是#或者是.,如果是#,表示这个方格是一个障碍物,色子无法翻转到这个方格,如果是.,表示这个方格是一个空格,色子可以翻转到这个方格。以上N*M 个字符表示N*M 的方格棋盘,色子不能移动到棋盘之外。以下一行有四个整数 x1,y1,x2,y2,(x1,y1)和(x2,y2)分别表示初始位置坐标和目标位置坐标。初始位置坐标和目标位置坐标可以看成是.的方格。以下两行分别表示初始位置时色子的状态和目标位置时色子的状态。色子的状态用色子的六个面来表示,每行的六个数字分别表示色子的上,下,北,南,西,东面。输入数据有多组,当 N=0 并且M=0 时,表示输入数据结束。 结果输出: 将求出的最少的移动步数输出到文件output.txt,如果无法从初始点到目标点,输出“-1”到文件output.txt。 ??提示: 对于第一组数据,状态如图片中所示,5 步可行的移动为: (0,0)-(0,1)-(1,1)-(2,1)-(3,1)-(3,2)。 对于第二组数据,6 步可行的移动为: (0,0)-(0,1)-(1,1)-(2,1)-(3,2)-(1,2) -(0,2)。 对于第三组数据,无法从初始状态翻转成目标状态。 存储策略: 谢谢 * N080320038 缪友猛 色子游戏问题: 色子游戏是一个在N*M 的方格上进行的棋盘游戏。棋盘的每行从北向南被标记为0 到N-1,每列从西到东被标记为0 到M-1。如下图所示: 棋盘上的每一个方格可以用一个坐标(x,y)表示,x 是行标记,y 是列标记。每一个色子都是一个立方体,它的六个面分别被标记为1,2,3,4,5 和6。其中标记为1,2 和3 的面两两相邻,标记为6 的面与标记为1 的面相反,标记为5 的面与标记为2的面相反,标记为4 的面与标记为3 的面相反。 游戏规则 色子初始时被放在一个方格上,要移动色子,玩家可以水平或垂直滚动色子到相邻的方格上。游戏的目的是要求用最少的移动步数,让色子从初始位置移动到目标位置。色子的状态必须与目标位置的状态相一致。 编程任务 用最少的移动步数,让色子从初始位置移动到目标位置并且使得色子的状态与目标位置的状态相一致。 输入文件示例 input.txt 4 3 ..# ... ... ... 0 0 3 2 1 6 5 2 4 3 6 1 4 3 5 2 4 3 ... ... ... ... 0 0 0 2 1 6 5 2 4 3 1 6 5 2 4 3 1 3 .#. 0 0 0 2 1 6 5 2 4 3 6 1 5 2 3 4 0 0 输出文件示例 output.txt 5 6 -1 题目解析: 1.色子是沿着东、西、南、北四个方向翻转。 2.方格中”.”能翻转到达的方格,而“#”不能翻转到达的方格。 3.让色子从初始位置移动到目标位置。色子的状态必须与目标位置的状态相一致。 ● ● ● ● ● ● ● ● ● ● ● # 1 6 5 2 4 3 4 3 5 2 6 1 5 2 3 4 6 1 3 4 2 5 6 1 2 5 4 3 6 1 6 1 4 3 5 2 4 3 ..# ... ... ... 0 0 3 2 1 6 5 2 4 3 6 1 4 3 5 2 例: 剪枝策略: 以游戏规则让符合约束条件的节点逐层扩展,用队列存储可扩展节点,并保存对应坐标的色子状态,用线性链表存储,Memory[x][y]表示x行y列的头节的。在扩展过程中把所有x行y列的色子状态保存在Memory[x][y]中 。在扩展节点时,先查询Memory[x][y]中是否有和当前色子状态相同的保存节点,如果有,则不保存,否则保存当前色子状态。(色子状态相同是指坐标对应和色子状态也依次对应),且把当前状态的色子状态入队(让它成为可扩展节点)。 也就是说:在扩展过程中,扩展树中不存在两个节点状态相同。剪枝策略是剪去所有这样的节点(该节点的对应坐标和状态在扩展树前面层次中出现过)。 1.用short 存储,因为short 只占有两个字节,而int占有四个字节。本题中数据不会很大,short已经足够存储。 2.在保存色子状态时,只要保存色子的两个面就行,用不着保存六个面如(上面和北面),这样色子的状态就已经确定下来。 *

文档评论(0)

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

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

1亿VIP精品文档

相关文档