机器人左手法则走迷宫程序问题

不要放在有墙的地方

左手法则对迷宫适用吗?所有的迷宫都管用吗?有科学推定吗?如果上面你回答不了,OK。~

呃,这个...
我想所谓的迷宫中的左手法则是说用左手摸着迷宫的一堵墙然后手不离墙的一直走,如果迷宫有一个很明显的出口(就是出口不是暗门的那种,而是无门的明显出口)那么你必定能走到出口。这原理很容易明白,迷宫的墙面必定都是连在一起的所以只有一面,你沿着这面墙往一个方向走肯定能找到整面墙的缺口即出口,只不过左手法则只使用与小范围的固定迷宫,而大范围的迷宫你用这种法则虽然一定能找到出口但是耗费的时间是恐怖的。
不管左手右手都是一样的,只不过因为那个事件就将这种方法标志性的描述为左手法则罢了。只是个名字而已,不含有什么特殊意义。
以上纯属个人想法,不含有确定性,有错谬请包涵了

下面的代码假定你的迷宫数据一定是合法的 (单一的入口和出口,不会打环,不会无解),如果数据不合法,可能导致死循环,数据合法性的检查你自己实现。

另外,我用 东南西北四个方向来代替所谓的上下左右,因为左右概念是相对的。 用python 2。

puzzle_walk 函数返回一个list, 每个元素是每次移动的路径坐标, 其第一个参数为迷宫的list数据, 第二个参数默认为 True 表示左手抹墙, False 则是右手抹墙。

简单说一下算法:首先找到入口格,设定初始面向 East ( 如果是右手抹墙则是 West),然后重复执行以下操作:

1. 如果当前格为最后一排且向南可以移动,则说明当前格为终点,结束。
2. 根据当前格的数据,找到下一步需要面向的方向, 方法是,如果当前方向上有墙,则顺时针(右手抹墙则逆时针)转身,重复这一步骤直到面向的方向上可以行走. 这里可以参考 turn 函数
3. 沿当前方向走一步, 参考 move 函数
4. 逆时针(右手抹墙则顺时针)转身一次,使当前面对方向为第3步之后的左手(或右手)方向, 然后回到步骤1

最后, 我的代码假定迷宫入口一定是从第1行的North 方向进入,出口一定是从最后一行的 South 方向出去,如果要支持从第一行的其他方向进(比如从 (0, 0) 的West进) ,最后一行的其他方向出,你需修改查找入口的代码和判断出口的代码,这个很简单, 自己去搞定吧。

N = 0E = 1S = 2W = 3class Walker(object): def __init__(self, x, y, direction): # coordinates self.x = x self.y = y self.direction = direction def turn(self, clockwise=True): if clockwise: self.direction = (self.direction + 1) % 4 else: self.direction = (self.direction + 4 - 1) % 4 def move(self): if self.direction == N: self.x -= 1 elif self.direction == E: self.y += 1 elif self.direction == S: self.x += 1 elif self.direction == W: self.y -= 1 def get_coords(self): return (self.x, self.y) def get_direction(self): return self.direction def puzzle_walk(puzzle, left_touching=True): route = [] rows = len(puzzle) columns = len(puzzle[0]) # locate the entrance coords = (-1, -1) for y in range(columns): cell = puzzle[0][y] if cell[N]: coords = (0, y) break assert coords[0] >= 0 and coords[1] >= 0 walker = Walker(coords[0], coords[1], E if left_touching else W) while True: x, y = walker.get_coords() cell = puzzle[x][y] route.append(tuple([x, y])) if x == rows-1 and cell[S]: # found the exit break # turn to the direction where no wall blocks while not cell[walker.get_direction()]: walker.turn(left_touching) # move walker.move() # face to the direction of the hand walker.turn(not left_touching) return route # 运行结果>>> p=[[(False, True, True, False), (True, True, False, True), (False, False, True, True)], [(True, False, True, False), (False, True, False, False), (True, False, False, True)]]# 左手抹墙>>> puzzle_walk(p)[(0, 1), (0, 2), (1, 2), (1, 1), (1, 2), (0, 2), (0, 1), (0, 0), (1, 0)]# 右手抹墙>>> puzzle_walk(p, False)[(0, 1), (0, 0), (1, 0)]

#15630442174# 求走迷宫的算法!(计算机的算法)(编程也可以 - ******
#闫昌# 我的思路:按照人类走迷宫的方法,贴着左边走,左边有路就向左走,左边没路向前走,左边前面都没路向右走 机器人的应该是:1.判断左边是否有墙,无墙:机器人左转,前进一步,继续判断左.. 2.左边有墙,则判断前方是否有墙,无则向前一步,跳回第一步 3.前方有墙(此时状态是左有墙,前有墙),则向机器人右转,跳回第一步 另外有个前提条件,机器人转弯需要原地转,有转弯半径的肯定不行.还有个问题,就是机器人自己不知道自己已经从迷宫出来了,会一直走..

#15630442174# 左手定则问题 - ******
#闫昌# 让磁感线穿入手心(手心对准N极,手背对准S极)四指指向电流方向(既正电荷运动的方向)那么拇指的方向就是导体受力方向.你要用右手代替,那么拇指的方向就是导体受力的反方向.同样,你用左手代替右手定则中的右手时,最后拇指指向的也是相反的.

#15630442174# 左手法则?? - ******
#闫昌# 确定载流导线在外磁场中受力方向的定则.又称电动机定则.左手平展,大拇指与其余4指垂直,若磁力线垂直进入手心,4指指向电流方向,则大拇指所指方向为载流导线在外磁场中受力的方向

#15630442174# 怎么使用左手定则? - ******
#闫昌# 左手定则: 左手定则(安培定则):已知电流方向和磁感线方向,判断通电导体在磁场中受力方向,如电动机. 伸开左手,让磁感线穿入手心(手心对准N极,手背对准S极), 四指指向电流方向 ,那么大拇指的方向就是导体受力方向. 其原...

#15630442174# 关于机器人制作的一些问题??我们组建了一个小组想做一个灭火机器人 ******
#闫昌# 为了解决灭火的动力问题最先的方案,我们设计了一个象老鼠夹子一样的装置,安装到机器人上,当发现蜡烛的火焰后,机器人缓慢前进,并左右摆动,以火焰作为一个触发源,当火焰烧断灭火装置前端的细线后,装置上的拍子释放,狠狠地拍下去.

#15630442174# 左手定则怎么用?以及一切磁场问题. - ******
#闫昌# 左手定则,也称电动机定则,可用于电动机的场景,主要用于判断磁场中物体受力的方向.①通电导体(安培力):伸开左手,使拇指与其余四个手指垂直,并且都与手掌在同一平面内;让磁感线从掌心进入,并使四指指向电流的方向,这时拇...

#15630442174# 寻仙怎么跑迷宫 - ******
#闫昌# 走迷宫必胜法则:左手或者右手原则 这办法其实是现实中可以使用的一种迷宫走法 其实很简单 基本所有的迷宫都能用这个办法出来 只要是迷宫 你先贴着左边的墙走 不要离开墙 一直贴着走 直到走到出口或者死路 如果走到死路 再换你另外一面墙 继续帖着走 基本换几次墙面你就会走出来了``如果实在听不懂 ``我就没办法了`我表达能力不是太好 ``那些知道什么迷宫走法的 就么看了`你们知道方向 我只是指点那些不懂迷宫的人`

#15630442174# 程序编写 打鼹鼠问题 ******
#闫昌# 包含一个正整数,表示被打死鼹鼠的最大数目.

  • 用51单片机做的小车如何实现小车走迷宫
  • 答:一种二叉树结构.注意,在上面的结果上我都加有"局部"两字,这是因为机器人走迷宫的次数如果不够多,或则说少于迷宫的总路径数,我们得到结果都是不完整的,只有当机器人走迷宫的次数足够大,以致于走遍了迷宫所有的路径,这时...

  • 发那科机器人同时2个方向移动斜着走程序怎么编辑
  • 答:1、确定机器人的起始位置和目标位置。2、使用直线插补指令来控制机器人同时在X和Y方向上移动。在程序的开头,使用G90指令将机器人设置为绝对坐标模式。使用G01指令,指定目标位置的X和Y坐标。例如:G01X2Y2F100,其中F100...

  • 川崎机器人程序为什么移动到某个点后停止不往下一行走了?
  • 答:你好川崎机器人程序移动到某个点后停止不往下一行走了,原因是电脑版出现了故障

  • 如何控制能力风暴机器人走36边形的程序
  • 答:1、首先打开电脑,进入这个风暴机器人的程序内部。2、其次在程序的控制能力里面,加入这个走36边形的程序。3、最后就能很好的控制它走36程序。

  • 库卡机器人程序自动走完不返回开始程序
  • 答:手动返回即可。在库卡机器人长时间运行时,会对其内部程序产生极大负荷,具体的表现形式就是程序自动走完不返回开始程序,这个时候只需要手动返回,重新开始运行即可解决。

  • 机器人编程第二步:具体问题具体分析
  • 答:所以对于我们机器人任务的每一步,“你要先知道怎么停下来”,我们需要知道这一步什么时候结束。以上节课的巡线任务为例。第一步是直行。具体任务描述是从起点巡线到A点。这里其实有两层含义:一个是巡线,一个是这一步...

  • 你知道机器人三大法则吗?
  • 答:机器人三大法则是:机器人不得伤害人类,或坐视人类受到伤害;除非违背第一定律,否则机器人必须服从人类命令;除非违背第一或第二定律,否则机器人必须保护自己。“机器人三定律”在阿西莫夫于1942年发表的作品《我,机械人》...

  • 乐高ev3教育版解魔方机器人程序问题(显示:RESET RGB,放魔方的位置不停...
  • 答:回答:把颜色传感器的线拔出来再插进去

  • (2008?荆门)科技馆为某机器人编制一段程序,如果机器人在平地上按照图...
  • 答:∵机器人从点A出发再回到点A时正好走了一个正多边形,∴多边形的边数为360°÷30=12,∴他第一次回到出发点O时一共走了12×1=12米.故选C.

  • 慧中虚拟仿真平台中不能编写让机器人走正方形的程序,对吗?
  • 答:可以,该系统平台可以编写让机器人行走的程序。用户只要按照行走程序输入编程代码即可。

    为传递更多家电数码信息,若有事情请联系
    数码大全网