鞍点的计算

来源:互联网 发布:工商行政管理网络教学 编辑:程序博客网 时间:2024/06/08 10:17
  1. 生成五行六列的数(在1~100之间),即分别定义i,j,通过循环生成二维数组。

  2. 找出每一行的最大值并标记,通过循环,若a>b为假,不交换两个数,如果a>b为真,把b的值给a.假设第一行第一列的数最大,那么在第一行此数会依次与第二行、第三行。。。进行比较,如果后一个数比前一个数大,那么此数的列号会被记录。(其他行也用此方法找出行最大数)

  3. 分析上步所得的行最大数是不是所在列的列最小数,这时我们就要借助于媒介K来分析。原理很简单:

    k=1一直到m行,对比一列中前后两个数的大小关系,若前一个数总是比后一个数小即:anma(k, column_max) < row_max总成立,则是鞍点,此时k=m+1,若anma(k, column_max) < row_max有一个不成立,则退出循环,无鞍点。

  4. 这个原理简单说就是:如果在这一列中(m行)有一个数比你设定的最小值还小,那么你设定的数肯定不是最小值,则m行的数都比它小,k=m+1m行都循环过来,找不到比它大的数,k=m+1

  5. 代码如下:

Option Base 1

Dim anma() As Integer

Dim m As Byte, n As Byte

Private Sub Command1_Click()

Cls

m = 5: n = 6

ReDim anma(m, n)

Dim i As Byte, j As Byte, k As Byte

For i = 1 To m

 For j = 1 To n

anma(i, j) = 10 + Int(Rnd * 90)

 Next j

Next i

For i = 1 To m

 For j = 1 To n

Print anma(i, j); Spc(3);

Next j

Print

Next i

Dim row_max As Integer, column_max As Byte

For i = 1 To m

row_max = anma(i, 1)

column_max = 1

 For j = 2 To n

 If anma(i, j) > row_max Then

 row_max = anma(i, j)

 column_max = j

 End If

 Next j

For k = 1 To m

 If anma(k, column_max) < row_max Then

 Exit For

End If

Next k

If k = m + 1 Then

 Print "鞍点:" & i & "" & column_max

End If

Next i

End Sub

0 0