CodeCombat计算机科学6.14脆弱的迷宫

本文介绍如何使用“右-上-左”/“上-右-左”策略解决CodeCombat中脆弱的迷宫关卡。通过设置标记避免hero走回头路,并探讨了如何利用二维数组记录路径。在理解循环解法的基础上,引入递归的概念,鼓励读者尝试用递归优化代码,体验递归的美妙之处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算机科学6.14脆弱的迷宫

在这里插入图片描述
这一关终于可以用递归解决问题了,
什么你不太懂递归,那可以先试试循环。
下面是我先讲讲用循环的思路:
hero想要到达出口,可以去循环“右-上-左”这样的一个组合命令
或者去循环“上-右-左”这样的组合
什么意思呢?
能不能换其他组合?

1、为什么是“右-上-左”/“上-右-左”策略

首先我们的目标在右上方
思考1:如果这些道路上没有障碍,我们怎样能最快到达右上角?

  • 要么“一路向右,到达最右边不能再继续后,在向上走”
  • 要么“一路向上,到达最上边不能再继续后,在向右走”

但这里,走到某个节点可能会有一些障碍,怎么办呢?

策略1:"右-上"走不通,可以向左走去探探路

2、hero总要走回头路怎么办?

在这里插入图片描述
问题1:在(2,5)处,如果再次重复“右上左",那么hero就一直在           (2.5)-(2,6)中间迂回,陷入超时无法完成的状态
思考2:从(2.6)到(2,5)此时如何跳过“向右走”,避免走回头路?
策略2:是否我们可以为走过的点做一个标记

每次走向下一个目标之前,去判断一下它是不是无标记的

  • 如果无标记,那么说明没走过,可以继续
  • 如果有标记,说明已经走过,跳过这个方向

思考3:这个思路用编程如何实现?
策略3:我们可以把这对应的“标记”放在二维数组对应的位置存储

好,接下来构建二维数组record[][]
还记得在上一关卡中,二维数组的构建方法吗?
6.13脆弱的迷宫跳转链接
这一关路线那么整齐,比黄金选择中的行列清晰多了
如果还没有很好掌握python构造二维数组的方法,大家可以回去看我的上一篇帖子!
左下角的起点设为record[0][0]

record = [[0] *7 for i in range (7)]

那么他的[row][col]怎么设置呢?
强调:一定要用int()

col=int(hero.pos.x-18)/distanceBetweenRooms
row=int(hero.pos.y-19)/distanceBetweenRooms

这下,循环转起来吧!

while True:
    while hero.isPathClear(hero.pos, {
   "x": hero.pos.x+ distanceBetweenRooms , "y": hero.pos.y}) and hero
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值