首先來看百度百科鞍點定義:鞍點(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 }