一片𝑚×𝑛大小的区域由马路与建筑构成,𝑧 盏坐标分别在(𝑥_𝑖,𝑦_𝑖 )的路灯会照亮距离其 1 个单位的十字区域,建筑会阻挡灯光的传播。 给出区域以及区域中灯和建筑所在的坐标,返回能够被灯照亮的地方。注意,区域左上 角坐标为 (0,0)。输入输出均以矩阵(二维列表)形式表示。 输入共 𝑛 + 𝑧 + 1 行。 第一行包括三个以空格分隔的整数 𝑚,𝑛,𝑧; 第二行到第 𝑧+1 行,每行两个整数 𝑥𝑖,𝑦𝑖,代表第 𝑖 个路灯的位置,𝑖=1,2, ......,𝑧; 第 𝑧 + 2 行到第 𝑛 + 𝑧 + 1 行,每行 𝑚 个整数以空格隔开,数字代表区域的状况,0 表示马路,1表示建筑。 输出区域新的状态,共 𝑛 行,每行 𝑚 个整数,以空格隔开,代表马路和建筑的数字 不变,使用 2 表示被灯照亮的地方,路灯所在坐标也视为被照亮
时间: 2023-05-21 12:05:56 浏览: 58
下面是能够被灯照亮的地方的代码:
def light_up(m, n, z, lamps, areas):
# 初始化空灯光矩阵
light_map = [[0 for j in range(m)] for i in range(n)]
# 对于每个路灯进行处理
for lamp in lamps:
# 获取路灯坐标
x, y = lamp
# 将路灯的坐标设置为已照亮
light_map[y][x] = 2
# 向上照亮
for i in range(y-1, -1, -1):
if areas[i][x] == 1:
break
light_map[i][x] = 2
# 向下照亮
for i in range(y+1, n):
if areas[i][x] == 1:
break
light_map[i][x] = 2
# 向左照亮
for j in range(x-1, -1, -1):
if areas[y][j] == 1:
break
light_map[y][j] = 2
# 向右照亮
for j in range(x+1, m):
if areas[y][j] == 1:
break
light_map[y][j] = 2
return light_map
# 获取参数
m, n, z = map(int, input().split())
lamps = [list(map(int, input().split())) for i in range(z)]
areas = [list(map(int, input().split())) for i in range(n-1)]
# 调用函数得到新的状态
new_areas = light_up(m, n-1, z, lamps, areas)
# 输出新的状态
for i in range(n-1):
print(' '.join(str(x) for x in new_areas[i]))