打开/关闭搜索
搜索
打开/关闭菜单
12
255
5
695
Seati Wiki
常用
首页
最近更改
服务器
入服教程
本周目参数
周目制简介
简明服务器规则
杂项
侧边栏定义页
所有页面
上传的所有文件
外部链接
Seati 官网
Seati Moment 图库
导航
特殊页面
上传文件
notifications
打开/关闭个人菜单
未登录
如果您进行任何编辑,您的IP地址会公开展示。
user-interface-preferences
个人工具
创建账号
登录
查看“用户:JesseM1024”的源代码
576次编辑
2023年6月30日 (星期五)注册
查看
阅读
查看源代码
查看历史
associated-pages
用户页
讨论
更多操作
←
用户:JesseM1024
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
代码备份如下 == 机械动力动力合成器矩阵周期最小化 == === 调包 === <code>import numpy as np</code> <code>import matplotlib.pyplot as plt</code> <code>from collections import deque</code> === 函数定义 === <code>def bfs_depth(grid, ini_pos):</code> <code> <nowiki>'''</nowiki></code> <code> grid: 2d np array, only 0, 1</code> <code> ini_pos: 2-len python int list, position vec [a,b]</code> <code> returns the depth 2d array</code> <code> <nowiki>'''</nowiki></code> <code> if not grid.size:</code> <code> return np.array([], dtype=int).reshape(0, 0)</code> <code> </code> <code> # 初始化访问数组并全部填充为-1</code> <code> visited = np.full_like(grid, -1, dtype=int)</code> <code> temp = ini_pos.copy()</code> <code> temp.append(0)</code> <code> # 起始点</code> <code> queue = deque([tuple(temp)]) # (row, col, depth)</code> <code> </code> <code> # 定义四个方向的移动</code> <code> directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]</code> <code> </code> <code> while queue:</code> <code> row, col, depth = queue.popleft()</code> <code> </code> <code> # 如果当前点不是障碍物(假设0表示障碍物),则更新访问数组</code> <code> if grid[row, col] != 0:</code> <code> visited[row, col] = depth</code> <code> </code> <code> # 检查相邻的点</code> <code> for dx, dy in directions:</code> <code> new_row, new_col = row + dx, col + dy</code> <code> </code> <code> # 如果相邻点在网格内且未被访问</code> <code> if 0 <= new_row < grid.shape[0] and 0 <= new_col < grid.shape[1] and visited[new_row, new_col] == -1:</code> <code> queue.append((new_row, new_col, depth + 1))</code> <code> </code> <code> return visited</code> <code>def edge_detector(grid):</code> <code> row, col = grid.shape[0], grid.shape[1]</code> <code> ava_out_pos_list = []</code> <code> directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]</code> <code> </code> <code> for i in range(row):</code> <code> for j in range(col):</code> <code> if grid[i,j]==1:</code> <code> if i==0 or i==row-1 or j==0 or j==col-1:</code> <code> ava_out_pos_list.append([i,j])</code> <code> else:</code> <code> exist_0 = False</code> <code> for dx, dy in directions:</code> <code> new_row, new_col = i + dx, j + dy</code> <code> if grid[new_row, new_col] == 0:</code> <code> exist_0 = True</code> <code> break</code> <code> if exist_0 :</code> <code> ava_out_pos_list.append([i,j])</code> <code> return ava_out_pos_list</code> === 参数定义 === <code>crafter_array = np.array([[0,0,0,0,1,0,0,0,0],</code> [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:最优结果绘制 === <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>
返回
用户:JesseM1024
。