鞍点(注意:这里是二维数组中的)的定义:在行中最大,并且在列中最小的数。
很容易理解,如下面2个例子
1 3 5 4 5 7
2 4 6 3 8 5
5 6 7 6 9 4
2个3*3的数组,第一个有一个鞍点,1行3列的5,第二个没有鞍点。
在网上随便看了下关于求鞍点的C程序,发现都不够严谨,遇到稍微特殊一点的情况,可能就找不出鞍点,例如
1 5 5
2 8 7
3 4 9
这个数组明显有一个鞍点1行3列的5,但是用网上比较随意的求鞍点的C程序是找不出这个鞍点的!原因在于,他们的C程序只比较了(1,2)的5是不是在第2列中最小,而(1,3)中的5并没有判断。如果把上例中的(3,2)的4改为6(比5大),那么(1,2)中的5也是一个鞍点,也就是说这个数组有2个鞍点!
看一下下面更特殊的情况:
7 8 9 6 6 6
3 3 3 6 6 6
5 6 7 6 6 6
第一个数组 中第二行的3,第二个数组中所有的6,都满足鞍点定义:在行中最大,并且在列中最小的数! 这些都是鞍点!?
关于这些数到底算不算鞍点,我们就不纠结了。总之,我们现在要编一个能找出所有这些符合“行最大,列最小”这一条件的数的C程序(无聊 - _-!)。
思路基本还是和普通情况下是一样的,只是要在此基础上加一些东西:
1 求出int a【m】【n】每一行中的最大值(一般情况下只有一个,但是特殊情况下可能有多个,最多有n个,所以我们用一个数组来b【n】接收相应最大值的列数)
2 判断这个最大值是不是它所在列的最小值(一个最大值判断1次,有几个最大值判断多少次。)
下面是我写的程序和实验结果(截图的,懒啊!):
下面是一些实验结果: