python蓝桥杯:长草

小明有一块空地,他将这块空地划分为行m 列的小块,每行和每列的长度都为 1。
小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地。
这些草长得很快,每个月,草都会向外长出一些如果一个小块种了草,则它将向自己的上、下、左、右四小块空地扩展,
这四小块空地都将变为有草的小块。请告诉小明,k个月后空地上哪些地方有草。

输入描述
输入的第一行包含两个整数 n,m。
接下来 n 行,每行包含 m 个字母,表示初始的空地状态,字母之间没有空格。如果为小数点,表示为空地,如果字母为 g,表示种了草。
接下来包含一个整数 k。 其中,2 < n,m <1000,1 ≤k≤ 1000。 

输出描述
输出 n 行,每行包含 m 个字母,表示 k 个月后空地的状态。如果为小数点,表示为空地,如果字母为 g,表示长了草。 

输入示例 

4 5

.g...

.....

..g..

.....

2

输出示例 

gggg.

gggg.

ggggg

.ggg.

from collections import deque

n,m = map(int,input().split())
grassland = []

#接受草地数值
for i in range(n):
    grassland.append(list(input()))

k = int(input())
q = deque()

#遍历得到草地队列
for i in range(n):
    for j in range(m):
        if grassland[i][j] == 'g':
            q.append((i,j))
#广度优先搜索
def bfs():
    t = len(q)    #存储当前状态草地总长
    while t > 0 : #遍历当前状态下所有的g
        temp = q.popleft()
        x1,y1 = temp[0],temp[1]
        #将一块草四周长满草
        for nx,ny in ((x1+1,y1),(x1-1,y1),(x1,y1+1),(x1,y1-1)):
            if nx >= 0 and ny >= 0 and nx < n and ny < m and grassland[nx][ny] == '.':
                grassland[nx][ny] = 'g'
                q.append((nx,ny))     #入队,表示下一状态的草地
        t -= 1  

for i in range(k):      #长k个月草
    bfs()
for i in range(n):
    print(''.join(grassland[i]))


 

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值