首先来看百度百科鞍点定义:鞍点(Saddle point)在微分方程中,沿着某一方向是稳定的,另一条方向是不稳定的奇点,叫做鞍点。在泛函中,既不是极大值点也不是极小值点的临界点,叫做鞍点。在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。在物理上要广泛一些,指在一个方向是极大值,另一个方向是极小值的点。
鞍点
输入 n和m表示 n*m 的数组,没有则输出 -1
输入
3 3
1 2 3
4 5 6
7 8 9
输出
3
分析:先找到每行元素最大的元素,然后判断是否是列上最小的元素即可。
代码:

1 #include <stdio.h> 2 3 int data[505][505]; 4 5 int main() 6 { 7 int n, m; 8 scanf("%d%d", &n, &m); 9 for (int i = 0; i < n; i++) 10 for (int j = 0; j < m; j++) 11 scanf("%d", &data[i][j]); 12 int count = 0; // 若没找到 输出-1 13 for (int i = 0; i < n; i++) 14 { 15 int maxn = -1, pos = -1, flag = 1; 16 for (int j = 0; j < m; j++) 17 if (data[i][j] > maxn) 18 maxn = data[i][j], pos = j; // 找到第i行最大的元素 19 for (int j = 0; j < n; j++) // 判断是否是列上的最小元素 20 { 21 if (data[j][pos] < maxn) // 列上有比其小的元素 22 { 23 flag = 0; 24 break; 25 } 26 } 27 if (flag) // 是列上最大 28 { 29 count++; 30 printf("%d\n", maxn); 31 } 32 } 33 if (!count) // 未找到 34 printf("-1\n"); 35 return 0; 36 }