一、个人理解
一个二维数组,每一行代表一个集合,一共三个集合,算出每个集合中的最大,再根据最大值所在的列计算最大值,如果还是最大值,即为鞍点。
二、举例
(1)第一行{8 13 31 28}计算最大值为31。
(2)31所在的列{31 52 81},52大于31,表示31不是鞍点。
(3)第二行{35 41 52 63}计算最大值为63。
(4)63所在的列{28 63 95},95大于63,表示63不是鞍点。
(5)第三行{71 176 81 95}计算最大值为176。
(6)176所在的列{13 41 176},计算最大值为176,表示176是鞍点。
三、需求
计算出二维数组中的鞍点。
四、源码
#include<stdio.h>
#define ROW 3
#define COL 4
void main()
{
int a[ROW][COL]={{8,13,31,28},{35,41,52,63},{71,176,81,95}};
int max,i,j,x,index,flag;
for(i=0;i<ROW;i++)
{
for(j=0;j<COL;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
printf("===================\n");
for(i=0;i<ROW;i++)
{
max = a[i][0];
index = 0;
flag = 0;
for(j=0;j<COL;j++)
{
if(max<a[i][j])
{
max = a[i][j];
index = j;
}
}
for(x=0;x<ROW;x++)
{
if(max<=a[x][index]&&x!=i)
{
printf("%d row , a[%d][%d] : %4d >= max value : %4d , no saddle point.\n",i,x,index,a[x][index],max);
flag = 1;
break;
}
}
if(!flag)
{
printf("%d row , max value : %4d , have saddle point.\n",i,max);
}
}
}
五、运行结果
(1)列出了要计算鞍点的二维数组。
(2)每行的比较结果,是否为鞍点。