Много может быть седловых точек, а это, как оказалось, не они.
Я сделал так:
Код:
Sub Poisk(ByVal a(,) As Single, ByRef LB As ListBox)
Dim m As Integer
Dim n As Integer
Dim sb As Integer 'столбец
Dim z1 As String = ""
Dim min As Single
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Integer
Dim zs As Integer
Dim zk As Integer
m = a.GetLength(0) - 1 'строки
n = a.GetLength(1) - 1 'столбцы
For i = 0 To m
zs = 0
zk = 0
sb = 0
min = a(i, sb)
For j = 1 To n
If a(i, j) < min Then
min = a(i, j)
sb = j
End If
Next
For k = 0 To n
If a(i, sb) = a(i, k) Then
zs = zs + 1
End If
Next
For l = 0 To m
If a(i, sb) <= a(l, sb) Then
zk = zk + 1
End If
Next
'Если zs > 1, то найденный минимальный элемент совпадает(по значению) с другим элементом в строке,
'и, следовательно, минимальный элемент уже не явл-ся минимальным.
'Если zk > 1, то найденный элемент меньше какого-либо элемента из его столбца.
If zs = 1 And zk = 1 Then
z1 = Space(1) + CStr("r(") + Format(i) + CStr(",") + Format(sb) + CStr(")=") + Format(a(i, sb), "000.000")
Exit For
Else
If i = m Then
MsgBox("Искомый элемент не найден!", , "Программа сообщает")
End If
z1 = "не найден"
End If
Next
LB.Items.Clear()
LB.Items.Add(z1)
Обратите на этот код внимание. Так как, вроде бы, я написал весьма специфичный алгоритм) Работает на все 100%.
Кроме того, я в программе сделал так, чтоб можно было и самому значения элементов вводить или же отметить галочку "Задать всем элементам массива случайные значения". Хотел даже сделать с диапазон значений, но в инсте будут ругаться, т.к. даже инициатива там может быть наказана)