10.12 求一个矩阵的鞍点,即在行上最小而在列上最大的点。
思路是:
1. 找出第i行上最小的数
2.检验该数是否是该列上最大的数
def saddle_point(arr)
# arr为m行n列,arr为矩政
m = arr.length
n = arr[0].length
b = [] # 存放每行最小点的行列数组
for i in 0...m # 每一行最小的点
# 行中找出最小的点
t = arr[i][0]
minij = 0
for j in 1...n
if arr[i][j] < t
t = arr[i][j]
minij = j
end
end
b << [i, minij]
puts "The row #{i}'s minimum is arr[#{i}][#{minij}]:#{arr[i][minij]}."
end
# 对数组b处理,b[m][2],b[m][0]:行数,b[m][1]:列数
c = []
b.each do |k|
row = b[i][0]
line = b[i][1]
t = arr[row][line]
# 判断该数是否是该列上最大的数
flag = 1
for i in 0...m
if t < arr[i][line]
flag = 0
break
end
end
c << [row, line, t] if flag == 1
end
c = c.uniq
if c.empty?
puts "Thers is no saddle point!"
return
else
c.each do |i|
row = i[0]
line = i[1]
t = arr[row][line]
puts "arr[#{row}][#{line}]:#{t} is saddle point."
end
return c
end
end
a1 =[[1,2,3,4],[1,5,8,6],[6,4,3,7],[6,3,4,1]]
c = saddle_point(a1)
puts "--------------------------------------"
a2 = [[1,2,3,4],[4,5,6,7],[8,9,10,11],[12,13,14,15]]
c = saddle_point(a2)
puts "--------------------------------------"
关于多个鞍点的,我实在是没有找出例子,不知有没有谁可以给我一个,验证一下。
有点难度,花了一个多小时吧。
明天去做新公司的体检,下周一入职。