JesseM1024(留言 | 贡献) 无编辑摘要 |
JesseM1024(留言 | 贡献) 无编辑摘要 |
||
第80行: | 第80行: | ||
<code> return visited</code> | <code> return visited</code> | ||
第133行: | 第134行: | ||
[1,1,1,0,0,0,1,1,1] | [1,1,1,0,0,0,1,1,1] | ||
]) | ]) | ||
=== 运行1:最优结果绘制 === | |||
<code>ava_start = edge_detector(crafter_array)</code> | |||
<code>cur_minimum_steps = np.inf</code> | |||
<code>result = None</code> | |||
<code>start = None</code> | |||
<code>edge_result = np.ones((crafter_array.shape[0],crafter_array.shape[1]))</code> | |||
<code>edge_result = edge_result*-1</code> | |||
<code>for start_pos in ava_start:</code> | |||
<code> arr = bfs_depth(crafter_array,start_pos)</code> | |||
<code> temp_step = np.max(arr)</code> | |||
<code> edge_result[start_pos[0],start_pos[1]] = temp_step</code> | |||
<code> if temp_step < cur_minimum_steps:</code> | |||
<code> cur_minimum_steps = temp_step</code> | |||
<code> result = arr</code> | |||
<code> start = start_pos</code> | |||
<code>print('minimum steps =',cur_minimum_steps,'and start at ',start)</code> | |||
<code>print(result)</code> | |||
<code>plt.figure()</code> | |||
<code>plt.imshow(result, cmap='viridis', aspect='auto')</code> | |||
<code>plt.colorbar()</code> | |||
<code>plt.title('crafter depth matrix')</code> | |||
<code>plt.xlabel('X')</code> | |||
<code>plt.ylabel('Y')</code> | |||
<code>plt.show()</code> | |||
=== 运行2:边缘结果绘制 === | |||
<code>print(edge_result)</code> | |||
<code>plt.figure()</code> | |||
<code>plt.imshow(edge_result, cmap='viridis', aspect='auto')</code> | |||
<code>plt.colorbar()</code> | |||
<code>plt.title('all output step matrix')</code> | |||
<code>plt.xlabel('X')</code> | |||
<code>plt.ylabel('Y')</code> | |||
<code>plt.show()</code> |
2024年7月30日 (二) 21:21的版本
代码备份如下
机械动力动力合成器矩阵周期最小化
调包
import numpy as np
import matplotlib.pyplot as plt
from collections import deque
函数定义
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
参数定义
crafter_array = np.array([[0,0,0,0,1,0,0,0,0],
[0,0,0,1,1,1,0,0,0], [1,1,1,1,1,1,1,1,1], [1,1,1,1,1,1,1,1,1], [0,1,1,1,1,1,1,1,0], [0,0,1,1,1,1,1,0,0], [0,1,1,1,1,1,1,1,0], [1,1,1,1,0,1,1,1,1], [1,1,1,0,0,0,1,1,1] ])
运行1:最优结果绘制
ava_start = edge_detector(crafter_array)
cur_minimum_steps = np.inf
result = None
start = None
edge_result = np.ones((crafter_array.shape[0],crafter_array.shape[1]))
edge_result = edge_result*-1
for start_pos in ava_start:
arr = bfs_depth(crafter_array,start_pos)
temp_step = np.max(arr)
edge_result[start_pos[0],start_pos[1]] = temp_step
if temp_step < cur_minimum_steps:
cur_minimum_steps = temp_step
result = arr
start = start_pos
print('minimum steps =',cur_minimum_steps,'and start at ',start)
print(result)
plt.figure()
plt.imshow(result, cmap='viridis', aspect='auto')
plt.colorbar()
plt.title('crafter depth matrix')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
运行2:边缘结果绘制
print(edge_result)
plt.figure()
plt.imshow(edge_result, cmap='viridis', aspect='auto')
plt.colorbar()
plt.title('all output step matrix')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()