鞍點問題


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM