#输入
3 3
..g
...
...
2
import sys
from collections import deque
input = lambda: sys.stdin.readline().strip()
#引入系统输入模块和双端队列,方便后续读取输入与实现 BFS。
#初始化网格参数
n, m = map(int, input().split()) # 输入 `3 3`,`n=3`(行),`m=3`(列)
g = [[0] * m for _ in range(n)] # 生成 3×3 的网格,初始全为 `0`(表示空白)。
di = [(0, 1), (0, -1), (1, 0), (-1, 0)] # 定义上下左右四个移动方向。
q = deque() # 初始化空队列,用于 BFS 扩散。
#标记初始g(草)位置
for i in range(n):
r = input() # 读取三行:`..g`、`...`、`...`
for j, x in enumerate(r):
if x == 'g':
g[i][j] = 1 # 第一行(`i=0`)第三列(`j=2`)设为 `1`(标记 `g`)。
q.append((i, j)) # 队列加入坐标 `(0, 2)`。
#执行BFS扩散
k = int(input()) # 输入 `2`,表示扩散次数 `k=2`。
while q and k:
for _ in range(len(q)):
x, y = q.popleft() # 第一次循环取出 `(0, 2)`。
for dx, dy in di:
nx, ny = x + dx, y + dy
# 检查新坐标是否合法且空白
if 0 <= nx < n and 0 <= ny < m and g[nx][ny] == 0:
g[nx][ny] = 1 # 标记新位置。
q.append((nx, ny)) # 如 `(1, 2)` 和 `(0, 1)` 加入队列。
k -= 1 # 第一次扩散后,`k=1`。
# 第二次扩散循环(`k=1`):
# 处理队列中的 `(1, 2)` 和 `(0, 1)`,继续向周围扩散,标记 `(0, 0)`、`(1, 1)`、`(2, 2)` 等。
#输出结果
for row in g:
print('.'.join('g' if x else '.' for x in row))
# 最终网格:
# 第一行:`[1, 1, 1]` → 输出 `g.g`
# 第二行:`[0, 1, 1]` → 输出 `.g.`
# 第三行:`[0, 0, 1]` → 输出 `..g`
python长草(BFS)
最新推荐文章于 2025-08-23 20:28:56 发布