找鞍点:在一个矩阵中,如果i行上的最大值a(i,j)同时是第j列上最小值,则称该数是一个鞍点。
例如:
1        4        9        83        4        6        17        5        8        6在上面的矩阵中,第二行第三列的元素6就是这个矩阵的鞍点。
下面是我写的程序,经过测试,漏洞百出。请大家指点迷津
Private Sub Command1_Click()
Const M As Integer = 3
Const N As Integer = 3
Dim min As Integer
Dim max As Integer
Dim p As Integer
Dim q As Integer
Dim data(M, N) As Integer
Dim i As Integer
Dim j As Integer
Dim k As Integer
Randomize Timer
For i = 1 To M
 For j = 1 To N
  data(i, j) = Rnd * 50
 Next
Next
For i = 1 To M
 For j = 1 To N
  Print data(i, j);
 Next
Print
Next
For i = 1 To M
 For j = 1 To N
  If data(i, j) > max Then
  p = i: q = j
  max = data(i, j)
  End If
 Next
 min = max
For k = 1 To M
 If min >= data(k, q) Then
  min = data(k, q)
  Exit For
End If
Next
If max = min Then
Print "找到鞍点:"; max
Print "其行值为:"; p, "其列值为:"; q
Exit Sub
End If
Next
Print "没找到鞍点"End Sub

解决方案 »

  1.   

    改你的代码,最直接的思路,下班前匆匆而成,你自己完善:    Const M As Integer = 3
        Const N As Integer = 3
        Dim iData(1 To M, 1 To N) As Integer
        Dim min As Integer
        Dim max As Integer
        Dim q As Integer
        Dim b As Boolean
        Dim i As Integer, j As Integer, k As Integer
        
        '生成数组
        Randomize Timer
        For i = 1 To M
            For j = 1 To N
                iData(i, j) = Rnd * 50
                Debug.Print iData(i, j);
            Next
            Debug.Print
        Next
        
        b = False
        For i = 1 To M
            '找行最大值
            max = 0
            min = 0
            q = 0
            For j = 1 To N
                If iData(i, j) > max Then
                    max = iData(i, j)
                    q = j  '记录列值
                    min = max
                End If
            Next j
            '找与q相对列的最小值
            For k = 1 To M
                If iData(k, q) < min Then min = iData(k, q)
           Next
            '判断max与min是否相等
            If max = min Then
                b = True
                Debug.Print "找到鞍点:"; max
           End If
        Next i
        If b = False Then Debug.Print "没有找到鞍点"
      

  2.   

    谢谢vbman2003 的回答,经过测试,成功
    ------一切以实际行动支持CSDN社区----------