1.鞍点的定义
若矩阵Am´n中的某一元素A [i] [j]是第i行中的最小值,同时又是第j列中的最大值,则称此元素为该矩阵的一个鞍点。鞍点可能不唯一。
如图所示元素4就为该数组的鞍点,4为所在第一行的最大元素,在第四列为最小元素,故为该数组鞍点。
2.查找鞍点思路
首先涉及到行和列,所以需要创建一个二维数组,以上面图片为例创建一个4行4列的整型数组 arr[4][4]。要求是先找到行最大的元素,然后看此元素是否为列最小。
此步骤为找到数组此行中的最大值以及列标,接下来行最大元素与该列元素一一进行比较如果为最小值那么输出,并做标记。输出一次后标记改变,最后可由此来判断是否输出无鞍点。
3.代码
#include<stdio.h>
#define N 4
int main() {
int arr[N][N],max,count=0,y=0,row;
int i,j;
for (i = 0; i < N; i++)//输入数组元素
for (j = 0; j < N; j++)
scanf("%d", &arr[i][j]);
for (i = 0; i < N; i++) {
max = arr[i][y];//初始最大值为每一行的第一个元素
for (j = 0; j < N; j++) { //此for循环作用为找到该行最大值
if (max < arr[i][j]) {
max = arr[i][j];
y = j; //记录最大值列标
}
}
for (row = 0; row < N; row++) { //该循环作用为判断是否为列最小
if (max > arr[row][y])
break; //一旦发现该值不是列最小,退出循环
} //如果循环自然结束,那么说明该值为最小,反之循环中发现更小值
if (row == N) { //自然退出循环,row<N就不成立,row自增至N(4)时条件不成立,非中途退出故此值为最小
printf("鞍点为:%d ", arr[i][y]);//输出鞍点
count++;//此变量为一个标志,输出一次鞍点自增一次
}
}
if (count == 0)//如果conut值始终为零则表示没有输出过,也就是没有鞍点。
printf("该数组无鞍点");
return 0;
}
输出结果:
最后感谢大家的观看,如有问题请指正。