鞍点问题

首先来看百度百科鞍点定义:鞍点(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 }
View Code

 

posted @ 2020-02-26 12:12  sqdtss  阅读(2830)  评论(0编辑  收藏  举报