鞍点:即某行最大的元素与该元素所在列的所有元素比较,判断是否为最小元素,是则是鞍点,否则不是鞍点。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define N 3
#define M 4
void main()
{
int i,j,k,a[N][M],max,maxj,flag;
int find=0;
printf("请输入数组:");
srand(time(0));
for(i=0;i<N;i++);
{
for(j=0;j<M;j++)
{
a[i][j]=rand()%80+10; //scanf("%d",&a[i][j]);
printf("%3d",a[i][j]);
}
printf("\n"); //输出矩阵
}
for(i=0;i<N;i++)
{
max=a[i][0]; //开始时假设a[i][0]最大
maxj=0; //将列号0赋给maxj保存
for(j=0;j<M;j++) //出第i行最大数
{
if(a[i][j]>max)
{max=a[i][j]; //将本行的最大数存放在max中
maxj=j;} //将最大的数所在的列好存放在maxj
}
}
flag=1; //假设是鞍点
for(k=0;k<N;k++)
if(max>a[k][maxj]) //将最大数和同列元素比较
flag=0; //若max不是同列数最小的,则不是鞍点
if(flag) //若是鞍点
{
find=1;
printf("a[%d][%d]=%d\n",i,maxj,max); //输出鞍点,所在的行列号,以及值
}
if(!flag&&find!=1)
printf("没有鞍点");
system("pause");
}