在所在行中最大,在所在列中最小。所以一个矩阵最多只有一个鞍点。
所以可以逐行寻找鞍点。先找出某行中最大的元素,再将该元素与同列中其他元素进行比较,若该元素同时是所在列中最小的元素,则它就是鞍点。
二、源码
#include <stdio.h>
2:
int n)
4: {
int max, i, j, k, flag;
for (i = 0; i < m; ++i)
7: {
8: max = 0;
9: flag = 1;
for (j = 1; j < n; ++j)
11: {
if (A[i][j] > A[i][max])
13: {
14: max = j;
15: }
16: }
17:
for (k = 0; k < n; ++k)
19: {
if (A[i][max] == A[i][k] && max != k)
21: {
22: flag = 0;
break;
24: }
25: }
26:
if (flag == 1)
28: {
for (k = 0; k < m; ++k)
30: {
if (A[k][max] <= A[i][max] && k != i)
32: {
33: flag = 0;
break;
35: }
36: }
37: }
38:
if (flag == 1)
40: {
41: *x = i;
42: *y = max;
return 1;
44: }
45: }
46:
return 0;
48: }
49:
int main()
51: {
int A[5][5], i, j, x, y;
);
for (i = 0; i < 5; ++i)
55: {
for (j = 0; j < 5; ++j)
57: {
, &A[i][j]);
59: }
60: }
61:
if (GetSaddlePoint(&x, &y, A, 5, 5))
63: {
, x+1, y+1);
65: }
else
67: {
);
69: }
return 0;
71: }