注意结束条件
if z==t:break
BFS是广度优先搜索,在第一层的所有未执行完之前是不会进入下一层的,所以当z==t时,所有的z==t-1都已经执行完成了。
from collections import deque
n,m=map(int,input().split())
mg=[]
for i in range(n):
list1=list(input())
mg.append(list1)
t=int(input())
q=deque([])
for i in range(n):
for j in range(m):
if mg[i][j]=='g':
q.append((i,j,0))
#print(q)
while q:
nows=q.popleft()
x,y,z=nows[0],nows[1],nows[2]
if z==t:
break
for dx, dy in [(0, 1), (1, 0), (0, -1), (-1, 0)]:
nx = dx + x
ny = dy + y
if 0 <= nx < n and 0 <= ny < m and mg[nx][ny] == '.':
mg[nx][ny] = 'g'
nz=z+1
q.append((nx,ny,nz))
for i in range(n):
print(''.join(mg[i]))