当前位置:编程学习 > VB >>

如何找出一个二维数组的鞍点

找鞍点:在一个矩阵中,如果i行上的最大值a(i,j)同时是第j列上最小值,则称该数是一个鞍点。
例如:
1        4        9        8

3        4        6        1

7        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
--------------------编程问答-------------------- 改你的代码,最直接的思路,下班前匆匆而成,你自己完善:



    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 "没有找到鞍点"
--------------------编程问答-------------------- 谢谢vbman2003 的回答,经过测试,成功
------一切以实际行动支持CSDN社区----------
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,