思路:将矩阵存在一个二维数组中,先分别将每行的最小值和每列的最大值求出然后存入两个一维数组中,之后对矩阵进行遍历,若其等于行最小列最大则输出,同时用count记录马鞍点的个数,为0时输出no。题目不难,但需细心。
#include<stdio.h>
int main()
{
int m,n,i,j;
int count=0;
int num[100][100];
int a[100],b[100];
int min;
int max;
scanf("%d %d",&m,&n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
scanf("%d",&num[i][j]);
}
for(i=0;i<m;i++)//求每行中最小
{
min=1000;
for(j=0;j<n;j++)
{
if(num[i][j]<min)
min=num[i][j];
}
a[i]=min;
}
for(j=0;j<n;j++)//求每列中最大
{
max=-1000;
for(i=0;i<m;i++)
{
if(num[i][j]>max)
max=num[i][j];
}
b[j]=max;
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(num[i][j]==a[i]&&num[i][j]==b[j])
{
printf("%d %d %d\n",i+1,j+1,num[i][j]);//若其等于行最小列最大则输出
count++;//记录个数
}
}
}
if(count==0)
printf("no");
return 0;
}
本文介绍了一个简单的算法,用于在一个给定的矩阵中找到所谓的“马鞍点”。这些点的值在其所在行中是最小的,在其所在列中是最大的。通过两步查找,即先找出每行的最小值和每列的最大值,再比较这两组值来确定马鞍点的位置。
17万+

被折叠的 条评论
为什么被折叠?



