酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

【问题描述】 如果整型数组a中存在这样的一个元素a[i, j],满足条件:a[i, j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。请编程计算出m*n的矩阵a的所有马鞍点,若矩阵中不存在马鞍点,应给出相应的信息。 【输入形式】 输入的第一行两个数据分别为矩阵的m,n值,以空格间隔; 第二行为整型数组中的所有元素,以空格间隔,按行来保存数据 【输出形式】输出所有的马鞍点,域宽为4(%4d);若无,打印 no。 【样例输入】 5 5 1 2 3 4 5 7 3 4 5 6 2 1 5 4 3 5 3 6 5 4 5 3 6 5 4 【样例输出】3 3 3 【样例说明】输入5*5的矩阵,第一行的数据为1 2 3 4 5,第二行 7 3 4 5 6,以此类推: 1 2 3 4 5 7 3 4 5 6 2 1 5 4 3 5 3 6 5 4 5 3 6 5 4 输出本数组中的三个个马鞍点3(1行1列) 3(3行1列) 3(4行1列),输出的域宽为4。

```python def find_saddle_points(matrix): # 存储每行的最小值及其所在列索引 row_min = [None] * len(matrix) # 存储每列的最大值及其所在行索引 col_max = [None] * len(matrix[0]) # 找到每行的最小值和其所在列索引 for i in range(len(matrix)): min_val = matrix[i][0] min_col = 0 for j in range(len(matrix[i])): if matrix[i][j] < min_val: min_val = matrix[i][j] min_col = j row_min[i] = (min_val, min_col) # 找到每列的最大值和其所在行索引 for j in range(len(matrix[0])): max_val = matrix[0][j] max_row = 0 for i in range(len(matrix)): if matrix[i][j] > max_val: max_val = matrix[i][j] max_row = i col_max[j] = (max_val, max_row) # 找出马鞍点 saddle_points = [] for i in range(len(matrix)): min_val, min_col = row_min[i] max_val, max_row = col_max[min_col] if min_val == max_val and i == max_row: saddle_points.append(min_val) # 输出结果 if saddle_points: for point in saddle_points: print("%4d" % point, end=" ") else: print("no") # 读取输入 m, n = map(int, input().split()) matrix = [] for _ in range(m): row = list(map(int, input().split())) matrix.append(row) find_saddle_points(matrix) """ 额外注意的地方: 1. 输入数据的合法性检查,比如输入的矩阵元素是否都是整数。 2. 处理矩阵的边界情况,例如只有一行或一列的矩阵。 3. 考虑优化算法的时间和空间复杂度,提高程序的性能。 """ ``` [2024-12-20 11:28:07 | AI写代码神器 | 493点数解答]

相关提问