- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
无人机迷宫赛竞赛课程
高阶版
场地分析(2,0)(2,1)?(2,2)(2,3)?(1,0)?(1,1)?(1,2)?(1,3)?(0,0)(1,0)(2,0)(3,0)把迷宫看成是有若干个单元格组成每当进入一个新的单元格之后,都有三个选择:右转、前进、左转可以将一个迷宫地图,转换成下图所示的树状结构来表示起点(1,0)左转不通直行不通右转进入(0,0)左转进入(1,0)左转不通直行进入(2,0)左转进入(1,2)左转进入(1,1)左转不通直行不通右转进入(2,1)左转进入(2,0)左转不通直行不通右转不通直行不通右转不通直行进入(2,2)左转不通直行不通右转进入(2,3)左转不通直行不通右转进入(1,3)到达终点右转不通直行不通右转不通右转不通直行不通右转不通
问题转化迷宫问题,可以看作是在一个三叉树中进行“深度优先搜索(DFS)”
深度优先搜索DFS一条路走到黑,不撞南墙不回头
实现DFS的两种方法递归栈
使用“栈”实现DFS栈是一种数据结构,或者说是数据储存方式,遵循“先进后出原则”。每当发现一个新的结点,在进入这个节点之前,将当前节点搜索进度(无人机转过的角度)“压入(push)”栈中。当发现进入了一个“死”时,回到上一个节点,并从栈的顶部读取上一个节点的搜索进度,并继续尝试其他分支。当找到了迷宫的出口,则此时栈中记录的路径就已经是回到迷宫起点的最短路径。此时,根据栈中的数据,退回起点。节点对应迷宫的一个单元格分支对应迷宫中的“左转、直行、右转”三种可能性
递归无限套娃递归的意思是一个在一个函数体中调用了他自己递归实际上是利用了函数“局部变量”的“功能”,保存了搜索进度。由于mind+和telloedu的函数均没有局部变量的功能,所以不能实现递归。????def?cell_action(self,status):????????flt?=?self.tl_drone.flight????????#?先右转,再探测距离,再转回中间,再探测距离,再左转,再探测距离????????_actions?=?[turn_right,detect_distance,turn_left,detect_distance,turn_left,detect_distance]????????_done_actions?=?[]????????_status?=?status????????tof_dis?=?self._read_tof_until_success()????????for?_action?in?_actions:????????????tof_dis?=?self._read_tof_until_success()?????????????if?_action?is?detect_distance:????????????????if?tof_dis??500:??#如果前方还可以继续前进,则进行一次递归。????????????????????self.move_carefully()??#?先向前某著名企业一步????????????????????self._int_pos(1)????????????????????_status?=??self.cell_action(status)??#?每当进入一个新的格子, 就再进行一次递归。????????????elif?_action?is?turn_right:????????????????self.int_angle?+=?90?#记录转过的角度????????????????flt.rotate(angle=90).wait_forpleted()?#执行转向动作????????????elif?_action?is?turn_left:????????????????self.int_angle?-=?90????????????????flt.rotate(angle=-90).wait_forpleted()
 原创力文档
原创力文档 
                        

文档评论(0)