小蓝灌溉。
2023-12-16 11:56:50
题目描述
小蓝负责花园的灌溉工作。
花园可以看成一个n行m列的方格图形。中间有一部分位置上安装有出水管。
小蓝可以控制一个按钮同时打开所有的出水管,打开时,有出水管的位置可以被认为已经灌溉好
每经过一分钟,水就会向四面扩展一个方格,被扩展到的方格可以被认为已经灌溉好。即如果前一分钟某一个方格被灌溉好,则下一分钟它上下左右的四个方格也被灌溉好。
给定花园水管的位置,请问分钟后,有多少个方格被灌溉好?
输入描述
输入的第一行包含两个整数n,m。
第二行包含一个整数t,表示出水管的数量
接下来t行描述出水管的位置,其中第行包含两个数r,c表示第r行第c列有一个排水管
接下来一行包含一个整数 k。
其中,1<n,m<100,1<t<10,1k100.
输出描述
输出一个整数,表示答案
输入
3 6
2
2 2
3 4
1
输出
9
import os
import sys
# 请在此输入您的代码
n,m=map(int,input().split(' '))
t=int(input())
origin_map=[[0]*m for _ in range(n)] #初始化地图
irrigate_map=[[0]*m for _ in range(n)] #灌溉后地图
stack=[]
for i in range(t):
x=list(map(int,input().split(' ')))
origin_map[x[0]-1][x[1-1]]=1 #标出初始水管
stack.append([x[0]-1,x[1]-1]) #记录已灌溉土地坐标
k=int(input()) #时间
cnt=0
while k>=0 and stack:
st=[] #下一轮灌溉开始的坐标
while stack:
grid=stack.pop() #取出已灌溉地图坐标中最后一个坐标
irrigate_map[grid[0]][grid[1]]=1
cnt+=1
if grid[0]>0 and irrigate_map[grid[0]-1][grid[1]] == 0: #左
st.append([grid[0]-1,grid[1]])
if grid[0]<n-1 and irrigate_map[grid[0]+1][grid[1]] == 0: #右 n-1索引从 0 开始,而行数则从 1 开始计数
st.append([grid[0]-1,grid[1]])
if grid[1]>0 and irrigate_map[grid[0]][grid[1]-1] == 0: #下
st.append([grid[0],grid[1]-1])
if grid[1] <m-1 and irrigate_map[grid[0]][grid[1]+1] == 0: #上
st.append([grid[0],grid[1]+1])
k-=1
stack=st[::] #添加下一轮灌溉开始的坐标
print(cnt)
文章来源:https://blog.csdn.net/weixin_72050316/article/details/135029483
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!