哨兵 查找算法_右手 深度

发布时间 2023-07-08 22:19:23作者: dontbealarmedimwithy
 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)