C语言-寻找矩阵中的“鞍点”
2017-05-07 14:58阅读:
矩阵中的“鞍点”定义:
在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。
【题目要求】
在一个矩阵中,可能会有这样的元素:它在该行最大,而在该列最小。我们把这样的元素称为“鞍点”。一个矩阵中也可能没有鞍点。任意输入一个5X5矩阵,寻找矩阵中的鞍点,并将它在矩阵中的位置(行、列)输出。
【分析题目】
这里面读懂题很简单,但是题目中蕴含着一个已知。“鞍点”只有一个。假设一个矩阵A有两个鞍点aij和a(i+t)(j+s):

根据鞍点的定义可知:
aij>b,aijb;同理a(i+t)(j+s)>c,a
pan
>(i+t)(j+s)c.这样就产生了矛盾,因此假设错误,因此,一个矩阵中,要存在鞍点也就只有一个。
【解题思路】
①确定第i行的最大数
②判断在第i行是否有相同的值,如果有结束该函数返回0,如果没有继续
③判断是否为该列最小的数,如果是返回1,否则返回0
【代码】
#include
#include
#define N 3
int getSaddlePoint(int *x,int *y,int (*A)[N],int m,int n);
//int
(*A)[N]也可不用指针 直接用int A[N][N]
int main()
{
int a[N][N],i,j,x,y;
printf('Input some digit into the 5 X 5
matrix');
for(i=0;i
{
for(j=0;j
{
scanf('%d',&a[i][j]);
}
}
if(getSaddlePoint(&x,&y,a,N,N) ==
1)
{
printf('%d,%d',x+1,y+1);
}
else
printf('None.');
return 0;
}
int getSaddlePoint(int *x,int *y,int (*A)[N],int m,int
n)
{
int i,j,max,flag=0,k;
for(i=0;i
{
max=0;
flag=1;
for(j=1;j
{
if(A[i][j]>A[i][max])
{
max=j;
}
}
for(k=0;k
{
if(A[i][max]
== A[i][k] && k!=max)
{
flag=0;
break;
}
}
if(flag == 1)
{
for(k=0;k
{
if(A[i][max] >= A[k][max] && k!=i)
{
flag=0;
break;
}
}
}
if(flag==1)
{
*x=i;
*y=max;
return
1;
}
}
return 0;
}