Python——寻找矩阵的【鞍点】(教师:恒风)
在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点
恒风的编程
思路:
使用while循环找到行中最大值,此时列的坐标已知,利用列表推导式生成列不变的纵列,利用min()函数得到纵列最小值,看此行的最大值是不是等于纵列的最小值 ,如果是,就是鞍点坐标位置。
n=int(input("请输人矩阵行数:"))
s=[]
for i in range(n):
m=input("请按行输入矩阵的值,用空格隔开:")
t=m.split(" ")
s.append(list(map(int,t)))
# print(s)
# s = [[1, 22, 3], [4, 15, 6], [7, 18, 9]]
a=0#行的坐标
b=0#列的坐标
lie=0#找出一行中最大值的时候,保存列号
foundflag=False#找到鞍点的标志
while a<len(s):
b=0
c=s[a][b]
while b<len(s):#在一行中一个一个的往后找出最大值
if s[a][b]>c:
c = s[a][b]
lie=b#lie的值在不断更新,当一列执行完后,lie的值就是这和一行最大值的列坐标
b=b+1
# print(lie)
zlie=[s[a][lie] for a in range(int(n))]#有了列号,利用列表推导式生成纵列的列表
# print(zlie)
if c==min(zlie):#如果行中最大值等于纵列的最小值就是鞍点位置
print("鞍点位置:",(a,lie))
foundflag = True
a=a+1
if not foundflag:
print("没有找到鞍点!")
安徽必刷卷(十二)考题:
附答案
也可以用for循环来实现
解决方式:
1.找出每行最大值
2.找出最大值所对应的的列中,这个值是否为该列最小值;如果是,那么为鞍点。
3.每行都没有鞍点,该矩阵木有鞍点
实现步骤:
行号for循环i=0 to 2
列号j循环:找出该行最大值
把最大值所在列号给colum,并把最大值给max
for行号循环:找出max所在的列中的最小值
把最小值给min,并记录此时行号在row
如果max==min,则输出鞍点a[row][col],break进入下一个行号的大循环
如果大的for循环结束后,依旧max不等于min
则,没有鞍点