题目:小桥流水人家
在n*m的地图上,存在一个喷水点(x,y). 如果相邻的位置低于有水的地方,水就能流到相邻的某位置。 已知各个地方的海拔高度,求水的最大覆盖个格子数。
输入描述:
第一行输入n,m,x,y.(1<=n,m<=1000,1<=x<=n,1<=y<=m) 以下n行每行m个整数,表示每个格子的海拔.(1<=h<=1000)
输出描述:
输出最大覆盖格子数
示例
输入:
3 5 2 3
3 4 1 5 1
2 3 3 4 7
4 1 4 1 1
输出:
6
原题代码(未补充完成)
class Solution:
def __init__(self) -> None:
pass
def solution(self, n, m, x, y, vector):
result = None
# TODO: 请在此编写代码
return result
if __name__ == "__main__":
arr_temp = [int(item) for item in input().strip().split()]
n = int(arr_temp[0])
m = int(arr_temp[1])
x = int(arr_temp[2])
y = int(arr_temp[3])
vector = []
for i in range(n):
vector.append([int(item) for item in input().strip().split()])
sol = Solution()
result = sol.solution(n, m, x, y, vector)
print(result)
解题
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2022/11/2 10:48
# @Author : TLY
# @Site :
# @File : 地图喷泉.py
# @Software: PyCharm
class Solution:
def __init__(self) -> None:
pass
def changshi(self, vector, matrix, n, m, a, b):
ll = [[-1, 0], [1, 0], [0, -1], [0, 1]]
for i in range(4): # 四边寻找 上下右左
a1 = a + ll[i][0]
b1 = b + ll[i][1]
if 0 <= a1 <= n - 1 and 0 <= b1 <= m - 1:
if vector[a][b] > vector[a1][b1]: # 若找到
matrix[a1][b1] = 1 # 标记位置
self.changshi(vector, matrix, n, m, a1, b1)
return matrix
def solution(self, n, m, x, y, vector):
result = 0
a, b = n - y, x - 1
matrix = [[0 for i in range(m)] for i in range(n)]
matrix[n - y][x - 1] = 1
matrix = self.changshi(vector, matrix, n, m, a, b)
for i in range(n):
for j in range(m):
if matrix[i][j] == 1:
result = result + 1
print(matrix)
return result
if __name__ == "__main__":
arr_temp = [int(item) for item in input().strip().split()]
n = int(arr_temp[0])
m = int(arr_temp[1])
x = int(arr_temp[2])
y = int(arr_temp[3])
vector = []
for i in range(n):
vector.append([int(item) for item in input().strip().split()])
sol = Solution()
result = sol.solution(n, m, x, y, vector)
print(result)
对示例可以完美输出,但测试用例行不通
运行中...
运行失败:不通过
您的代码已保存。
出现错误,您提交的程序运行出错,请根据以下提示进行修改。
Traceback (most recent call last):
File "Main.py", line 53, in
result = sol.solution(n, m, x, y, vector)
File "Main.py", line 27, in solution
matrix[n - y][x - 1] = 1
IndexError: list index out of range
问题归纳
输入描述中:第一行输入n,m,x,y.(1<=n,m<=1000,1<=x<=n,1<=y<=m) 以下n行每行m个整数,表示每个格子的海拔.(1<=h<=1000)
加粗部分,逻辑上不太对
根据n行每行m个整数,可以得出n行m列的列表,(x,y)是笛卡尔坐标
根据输入:
3 5 2 3 # n m x y
3 4 1 5 1
2 3 3 4 7
4 1 4 1 1
只有第一行的4满足输出:
6
而(x,y)和n m 不是对应关系,
n m坐标
3 4 1 5 1 # n=1
2 3 3 4 7 # n=2
4 1 4 1 1 # n=3
---------------
# 1 2 3 4 5 # m
x y坐标
3 4 1 5 1 # y=3
2 3 3 4 7 # y=2
4 1 4 1 1 # y=1
---------------
# 1 2 3 4 5 # x
所以**(1<=n,m<=1000,1<=x<=n,1<=y<=m)**应该为(1<=n,m<=1000,1<=y<=n,1<=x<=m)
仅个人理解,有错勿喷