В матрице A найти седловую точку и ее координаты p, q либо установить, что такой точки нет

Седловой точкой в матрице называется элемент, являющийся одновременно наибольшим в столбце и наименьшим в строке. Седловых точек может быть и несколько (в этом случае они имеют равные значения).

code: #basic
Option Base 1
 
Sub mtrx()
Dim R As Long, C As Long
Dim MyRange As Range
Set MyRange = Selection
R = MyRange.Rows.Count
C = MyRange.Columns.Count
 
Dim isFind 'нашли точку
isFind = False 'пока нет
 
' Находим седловые точки
For i = 1 To R ' цикл по строкам
  ' найдем максимум в строке
  maxstr = MyRange.Cells(i, 1)
  For counter = 2 To R
    If MyRange.Cells(i, counter) > maxstr Then
      maxstr = MyRange.Cells(i, counter)
    End If
  Next counter
  ' теперь проверим для всех значений =maxstr, являются ли они
  ' минимумом в своем столбце
  For j = 1 To C
    If MyRange.Cells(i, j) = maxstr Then
      imin = 1
      For counter = 1 To R
        If MyRange.Cells(counter, j) < MyRange.Cells(i, j) Then ' Есть меньший элемент
          imin = 0
        End If
      Next counter
      ' Если элемент минимален в столбце - то это седловая точка
      If imin = 1 Then
        MsgBox "Седловая точка (" & i & "," & j & ")=" & MyRange.Cells(i, j)
        isFind = True
      End If
    End If
  Next j
Next i
 
If Not isFind Then MsgBox "Седловой точки нет."
End Sub

автор: Toxa33rus

Поделиться:

Похожие статьи: