如何找出一个二维数组的鞍点
找鞍点:在一个矩阵中,如果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
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
--------------------编程问答-------------------- 改你的代码,最直接的思路,下班前匆匆而成,你自己完善:
--------------------编程问答-------------------- 谢谢vbman2003 的回答,经过测试,成功
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 "没有找到鞍点"
------一切以实际行动支持CSDN社区----------
补充:VB , 基础类