一题多玩,Python花式求解开门寻宝游戏

董付国老师Python系列教材(累计印刷超过200次)推荐与选用参考

开学第一课:一定不要这样问老师Python问题

3000道Python习题免费在线练习

“Python小屋”1300篇历史文章分类速查表

董付国老师Python教学PPT汇总与题库分享

==============

版权声明:由于公众号后台规则问题,本文暂时无法设置原创标记,但仍属原创内容,微信公众号“Python小屋”坚持只发原创技术文章。

=============

推荐教材1:董付国编著,《Python数据分析、挖掘与可视化 (慕课版 第2版)》,ISBN:978-7-115-62634-9,定价59.8元,2024年1月出版(第1版累计印刷11次,已退出历史舞台),配套慕课“Python数据分析与数据可视化”被评为智慧树精品课程,人民邮电出版社“优秀作译者”

619df213d35c7f07710548adebf39bee.png

图书内容:Python快速入门,NumPy数组与矩阵运算,Pandas数据分析实战,sklearn机器学习实战,Matplotlib数据可视化实战

配套慕课:智慧树网搜索“董付国”,书中二维码也可以看微课

页数:254

适用专业:计算机、数据科学、统计、管理

适用层次:研究生/本科/专科

适用学时:48/64

样书申请:https://www.ryjiaoyu.com/book/details/50017

================

推荐教材2:董付国著,《Python程序设计与数据采集(微课版)》,ISBN:978-7-115-61183-3,人民邮电出版社,2023年5月出版,2023年9月第2次印刷,定价59.8元

配套资源:教学大纲、电子教案、课件、源码、数据文件、章节习题及答案、25小时微课、在线练习与考试系统

样书申请:https://www.ryjiaoyu.com/book/details/45732

ba5eda0056869535defb4c7675e34cac.jpeg

=============

问题描述:

小明参加一个游戏,面前从左向右有若干个门,最右边一个门里面是宝藏,前面的每个门打开后会看到一个数字,这个数字表示玩家最多可以向右跨越几个门,例如3表示玩家可以在右边的第1、2、3这三个门中选择一个打开,1表示只能选择打开下一个门,0表示掉进陷阱不能再移动(游戏失败)。

(1)使用回溯法求解所有路径

核心思路:

从下标0出发,尝试所有可能的下一步选择,对于每个选择都尝试再下一步的所有可能选择,重复这个过程。到达目的地或者无法继续行走时回退一步继续尝试其他选择,尝试所有可能的路径并记录经过的位置,如果某条路径最终到达最后一个门就标记为一个有效路径。

例如,以列表[5, 4, 3, 2, 2, 0, 3]为例,从下标0出发的下一步可以到达下标1、2、3、4、5这五个位置,假设下一步选择了下标1那么再下一步可以到达下标2、3、4、5,假设下一步选择了下标2那么再下一步可以到达下标3、4、5,假设下一步选择了下标3那么再下一步可以到达下标4、5,假设下一步选择了下标4那么再下一步可以到达下标5、6,假设下一步选择了下标5结果该位置的数字为0表示掉入陷阱无法移动,于是回退一步回到下标4,重新选择下标6发现到达终点,标记为一条有效路径。然后再回退到下标4的位置发现从该位置出发的路径都走完了,于是再回退一步回到下标3的位置尝试其他选择,...一直到所有路径都走一遍为止。这个过程类似于遍历下图所示的多叉树,该图中每个节点中逗号前面为下标编号,逗号后面为该节点的值(也就是最多可以向右移动几个门)。最终找到的有效路径有(0, 1, 2, 3, 4, 6)、(0, 1, 2, 4, 6)、(0, 1, 3, 4, 6)、(0, 1, 4, 6)、(0, 2, 3, 4, 6)、(0, 2, 4, 6)、(0, 3, 4, 6)、(0, 4, 6),也就是图中红色节点表示的路径。

a644dd2a692fe5a27b257a5554acf771.png

参考代码1:

e1e62a3623a3cea1bab8dac60b995547.png

运行结果1:

79a72b955a91c8b538e89017c7748fdb.png

下面的代码也是回溯法的思路,具体实现略有区别,首先把列表转换为字典,相当于一个有向图的邻接表,然后再利用图论算法来寻找有向图中的路径。

参考代码2:

af2c7d216069bbd0664eb77a952f0798.png

运行结果:

7864826b4814d2aa4ac1bafa3d1ef80f.png

(2)使用贪心算法求解

核心思路:

每次都向右移动尽可能多的距离,如果无法到达终点就提示“无法跳到最后一个位置”。仍以[5, 4, 3, 2, 2, 0, 3]为例,使用贪心算法时从第1个门直接跳到第6个门掉入陷阱无法移动,游戏失败。如果门后数字分别为[5, 4, 3, 2, 2, 2, 3],从第1个门跳到第6个门,从第6个门跳到第7个门,成功。

88657eb94bf5a83e164dcc822bbb6a89.png

参考代码:

3fb790f0d74f06b803ad99a422a6bb1f.png

运行结果:

dfb2f8904af448e6c1cc5fffd16007bd.png

(3)使用动态规划算法求解

使用动态规划算法求解开门寻宝游戏,要求跳跃次数最少,如果有多个解的话返回门编号最小的跳跃方式。

参考代码:

115ec6f595af4c8d73a0f391db4910db.png

运行结果:

ea34d07906e43dea84f3cefacf9e515c.png

使用动态规划算法求解开门寻宝游戏,要求跳跃次数最少,如果有多个解的话返回门编号最大的跳跃方式。

参考代码:

35c21f123a14ae24487724d042a160a5.png

运行结果:

e6e83f8039650a0bda42394f52fccca7.png

=================

温馨提示:

关注微信公众号“Python小屋”,在公众号后台发送消息“大事记”可以查看董付国老师与Python有关的重要事件;发送消息“教材”可以查看董付国老师出版的Python系列教材(已累计印刷超过200次)的适用专业详情;发送消息“历史文章”可以查看董付国老师推送的超过1300篇原创技术文章;发送消息“会议”可以查看近期董付国老师的培训安排;发送消息“微课”可以查看董付国老师免费分享的超过700节Python微课视频;发送消息“课件”可以查看董付国老师免费分享的Python教学资源;发送消息“小屋刷题”可以下载“Python小屋刷题神器”,免费练习3857道客观题和776道编程题,题库持续更新;发送消息“编程比赛”了解Python小屋编程大赛详情。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值