求一个二维数组的鞍点
鞍点(Saddle point)在微分方程中,沿着某一方向是稳定的,另一条方向是不稳定的奇点,叫做鞍点。在泛函中,既不是极大值点也不是极小值点的临界点,叫做鞍点。在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。在物理上要广泛一些,指在一个方向是极大值,另一个方向是极小值的点。
思路: 将每一行的最大值求出,当求出某一行的最大值的时候
同时记住最大值所在的列号,然后求出该列的最小值,同时
记住最小值所在的行号,如果该行号和当前所遍历的行号相等
则说明是鞍点
#include<stdio.h>
int main(void)
{
int a[4][4] = { {7, 8, 9, 18},
{4, 6, 2, 17},
{1, 9, 3, 14},
{8, 5, 4, 16}};
int i, j;
int max;
int min;
int index_row=0;
int index_colum=0;
//一行一行遍历
for (i=0; i<4; i++)
{
max = a[i][0];
//求出当前行的最大值并且记住最大值的行号
for (j=0; j<4; j++)
{
if (a[i][j])
{
max = a[i][j];
index_colum = j;
}
}
min = a[0][index_colum];
//求最大值所在的列上的最小值,并且记住最小值所在的行号
for (j=0; j<4; j++)
{
if (min > a[j][index_colum])
{
min = a[j][index_colum];
index_row = j; //最小值所在的行号
}
}
if (i == index_row)
{
printf("鞍点为a[%d][%d] = %d\n", index_row, index_colum, a[index_row][index_colum]);
}
}
}