哨兵 查找算法_右手 深度
1 import numpy as np 2 3 # 生成一个 10 *10 全为0的 array 4 5 maze = np.zeros((10,10),dtype=int) 6 # 给 array 使用 数字9包围 7 # 添加行 8 maze = np.insert(maze, 0, np.full(10,9,dtype=int), axis=0) 9 maze = np.insert(maze, len(maze), np.full(10,9,dtype=int), axis=0) 10 # 插入列 11 maze = np.insert(maze, 0, np.full(12,9,dtype=int), axis=1) 12 maze = np.insert(maze, len(maze[0]), np.full(12,9,dtype=int), axis=1) 13 14 # print(maze) 15 # array shape 16 print(np.shape(maze)) 17 # 随机添加 数字9 18 for i in range(len(maze[0])): 19 for j in range(len(maze[0])): 20 if np.random.rand() >0.7: 21 maze[i][j] = 9 22 # 对第六行倒数第二个 数字改成1 23 maze[6][-2] = 1 24 25 print(maze) 26 27 ''' 28 使用右手法则的深度优先查找进行搜索 29 将手挨着右侧的墙壁, 边扶着墙边移动的方法.当走到尽头碰壁了,只需要 30 向左转并继续重复这一操作即可 31 程序会保持前进的方向, 对右侧, 前面, 左侧, 后面 按顺序进行确认并 32 朝着前进方向移动 33 (当移动到未曾走过的位置时增加移动次数, 移动到已经走过的位置时 34 减少移动次数的方法, 可以实现最短路径查找) 35 ''' 36 37 # 指定右手法则中的移动方向(下, 右, 上, 左) 38 dir = [[1,0],[0,1],[-1,0],[0,-1]] 39 # 设置起点位置 (x坐标 y坐标 移动次数 方向) 40 x, y, depth, d = 1, 1, 0, 0 41 42 while maze[x][y] !=1: 43 # 设置为已搜索 44 maze[x][y] ==2 45 46 # 使用右手法则进行搜索 47 for i in range(len(dir)): 48 # 在前进方向的右侧开始按顺序进行搜索 49 j = (d+i-1)%len(dir) 50 if maze[x + dir[j][0]][y+dir[j][1]]<2: 51 # 遇到未曾走过的位置时, 前进并增加移动次数 52 x += dir[j][0] 53 y += dir[j][1] 54 d = j 55 depth +=1 56 break 57 elif maze[x + dir[j][0]][y+dir[j][1]] ==2: 58 # 遇到已经走过的位置时, 前进并减少移动次数 59 x += dir[j][0] 60 y += dir[j][1] 61 d = j 62 depth -= 1 63 break 64 print(depth) 65 print(maze)