关于二维数组求鞍点的C程序(多鞍点?!)

来源:互联网 发布:阿里云 微信公众号 编辑:程序博客网 时间:2024/05/18 03:57

鞍点(注意:这里是二维数组中的)的定义:在行中最大,并且在列中最小的数。

很容易理解,如下面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次,有几个最大值判断多少次。)


下面是我写的程序和实验结果(截图的,懒啊!):



下面是一些实验结果:

                                                                           








原创粉丝点击