您的位置:首页 > 编程语言

编程基本功——寻找矩阵中的“鞍点”

2010-05-25 08:37 806 查看

一、问题分析

在所在行中最大,在所在列中最小。所以一个矩阵最多只有一个鞍点。

所以可以逐行寻找鞍点。先找出某行中最大的元素,再将该元素与同列中其他元素进行比较,若该元素同时是所在列中最小的元素,则它就是鞍点。

二、源码

#include <stdio.h>
int GetSaddlePoint(int *x, int *y, int (*A)[5], int m, int n)
{
 int max, i, j, k, flag;
 for (i = 0; i < m; ++i)
{
 max = 0;
 flag = 1;
 for (j = 1; j < n; ++j)
{
 if (A[i][j] > A[i][max])
{
 max = j;
}
}
 for (k = 0; k < n; ++k)
{
 if (A[i][max] == A[i][k] && max != k)
{
 flag = 0;
 break;
}
}
 if (flag == 1)
{
 for (k = 0; k < m; ++k)
{
 if (A[k][max] <= A[i][max] && k != i)
{
 flag = 0;
 break;
}
}
}
 if (flag == 1)
{
 *x = i;
 *y = max;
 return 1;
}
}
 return 0;
}
int main()
{
 int A[5][5], i, j, x, y;
 printf("please input some digit into the 5*5 matrix\n");
 for (i = 0; i < 5; ++i)
{
 for (j = 0; j < 5; ++j)
{
 scanf("%d", &A[i][j]);
}
}
 if (GetSaddlePoint(&x, &y, A, 5, 5))
{
 printf("\n SaddlePoint is (%d , %d)\n", x+1, y+1);
}
 else
{
 printf("there is no SaddlePoint\n");
}
 return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: