求出n×m二维整数数组中的所有逆鞍点。这里的逆鞍点是指在其所在的行上最大,在其所在的列上最小的元素。若存在逆鞍点,则输出所有逆鞍点的值及其对应的行、列下标。若不存在逆鞍点,则输出“Not”。要求至少使用一个自定义函数。 输入格式: 测试数据有多组,处理到文件尾。每组测试的第一行输入n和m(都不大于100),第二行开始的n行每行输入m个整数。 输出格式: 对于每组测试,若存在逆鞍点,则按行号从小到大、同一行内按列号从小到大的顺序逐行输出每个逆鞍点的值和对应的行、列下标,每两个数据之间一个空格;若不存在逆鞍点,则在一行上输出“Not”(引号不必输出)。 输入样例: 3 3 97 66 96 85 36 85 88 67 91 3 4 73 89 74 76 6 33 74 0 27 57 6 32 输出样例: 85 1 0 85 1 2 Not
时间: 2024-03-22 12:38:13 浏览: 78
找出一个二维数组中的鞍点,即该位置上的元素在该行最大,在该列上最小 也可能没有鞍点
好的,这是一个简单的二维数组问题。我来帮你写一个 Python 的实现,其中使用了一个自定义函数 `find_inverse_saddle_point` 来查找逆鞍点:
```python
def find_inverse_saddle_point(matrix):
n, m = len(matrix), len(matrix[0])
row_max = [max(row) for row in matrix]
col_min = [min(col) for col in zip(*matrix)]
inverse_saddle_points = []
for i in range(n):
for j in range(m):
if matrix[i][j] == row_max[i] == col_min[j]:
inverse_saddle_points.append((matrix[i][j], i, j))
return inverse_saddle_points
while True:
try:
n, m = map(int, input().split())
matrix = [list(map(int, input().split())) for _ in range(n)]
inverse_saddle_points = find_inverse_saddle_point(matrix)
if inverse_saddle_points:
inverse_saddle_points.sort(key=lambda x: (x[1], x[2]))
for point in inverse_saddle_points:
print(point[0], point[1]+1, point[2]+1, end=" ")
print()
else:
print("Not")
except:
break
```
其中,`row_max` 和 `col_min` 分别是每行和每列的最大值和最小值的列表,然后用两重循环遍历矩阵,找到符合条件的逆鞍点并添加到结果列表中。最后根据结果列表输出结果即可。注意,行和列的下标都是从1开始的,所以在输出时需要加1。另外,为了满足题目输出要求,需要对结果按行号和列号排序,并且每个逆鞍点后面需要输出一个空格。
阅读全文