代码备份如下
机械动力动力合成器矩阵周期最小化
def bfs_depth(grid, ini_pos):
'''
grid: 2d np array, only 0, 1
ini_pos: 2-len python int list, position vec [a,b]
returns the depth 2d array
'''
if not grid.size:
return np.array([], dtype=int).reshape(0, 0)
# 初始化访问数组并全部填充为-1
visited = np.full_like(grid, -1, dtype=int)
temp = ini_pos.copy()
temp.append(0)
# 起始点
queue = deque([tuple(temp)]) # (row, col, depth)
# 定义四个方向的移动
directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
while queue:
row, col, depth = queue.popleft()
# 如果当前点不是障碍物(假设0表示障碍物),则更新访问数组
if grid[row, col] != 0:
visited[row, col] = depth
# 检查相邻的点
for dx, dy in directions:
new_row, new_col = row + dx, col + dy
# 如果相邻点在网格内且未被访问
if 0 <= new_row < grid.shape[0] and 0 <= new_col < grid.shape[1] and visited[new_row, new_col] == -1:
queue.append((new_row, new_col, depth + 1))
return visited
def edge_detector(grid):
row, col = grid.shape[0], grid.shape[1]
ava_out_pos_list = []
directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
for i in range(row):
for j in range(col):
if grid[i,j]==1:
if i==0 or i==row-1 or j==0 or j==col-1:
ava_out_pos_list.append([i,j])
else:
exist_0 = False
for dx, dy in directions:
new_row, new_col = i + dx, j + dy
if grid[new_row, new_col] == 0:
exist_0 = True
break
if exist_0 :
ava_out_pos_list.append([i,j])
return ava_out_pos_list