4.1

时长:两个小时

问题:

8-8 【Python0009】查找鞍点
分数 10
作者 doublebest
单位 石家庄铁道大学

【题目描述】对于给定5X5的整数矩阵,设计算法查找出所有的鞍点的信息(包括鞍点的值和行、列坐标,坐标从1开始)。
提示:鞍点的特点:列上最小,行上最大。
【练习要求】请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。
【输入格式】输入5行5列整数,同行数据间以空格为间隔。
【输出格式】在一行中以以下格式输出矩阵中的所有鞍点,每个鞍点的显示格式为:
[<鞍点的行坐标>,<鞍点的列坐标>,<鞍点的值>]
【输入样例】11 3 5 6 9
12 4 7 8 10
10 5 6 9 11
8 6 4 7 8
15 10 11 20 25
【输出样例】[4,1,8][4,5,8]

代码:

def input_matrix(rows, cols):
"""从用户处输入矩阵数据"""
matrix = []
print(f"请输入一个{rows}x{cols}的整数矩阵:")
for i in range(rows):
row = list(map(int, input(f"请输入第{i + 1}行,用空格分隔每个数字: ").split()))
if len(row) != cols:
print("输入错误,请确保每行有正确的列数。")
return None
matrix.append(row)
return matrix

def find_saddle_points(matrix):
"""查找并返回矩阵中的所有鞍点信息"""
rows = len(matrix)
cols = len(matrix[0])
saddle_points = []

for i in range(rows):
for j in range(cols):
# 检查是否为行中的最大值
is_max_in_row = all(matrix[i][j] >= matrix[i][k] for k in range(cols) if k != j)
# 检查是否为列中的最小值
is_min_in_col = all(matrix[i][j] <= matrix[k][j] for k in range(rows) if k != i)

if is_max_in_row and is_min_in_col:
saddle_points.append((matrix[i][j], i + 1, j + 1))

return saddle_points

def main():
matrix = input_matrix(5, 5)
if matrix:
saddle_points = find_saddle_points(matrix)
if saddle_points:
print("找到的鞍点如下:")
for point in saddle_points:
print(f"值:{point[0]},位置:({point[1]}, {point[2]})")
else:
print("矩阵中没有鞍点。")
else:
print("矩阵输入有误。")

if __name__ == "__main__":
main()
posted @ 2024-06-19 17:42  孙锺鸣  阅读(7)  评论(0编辑  收藏  举报