小蓝灌溉。

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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。