要求如下:找出一个二维数组鞍点,即在该位置上的元素在该行最大、在该列上最小,也可能没有鞍点。
输入 :一个二维矩阵
输出 :一个鞍点,如果存在并打印鞍点所在行列的下标,如果不存在,打印一个错误值(int类型极大值)
c程序实现如下:
#include <stdio.h>
#include<limits.h>
int Andian(int (*p)[3],int row,int *max_row,int *max_col)
{
int max = 0;
//int max_row = 0;
//int max_col = 0;
int col = 0;
int k = 0;
col = sizeof(p[0]) / sizeof(p[0][0]);
for (int i = 0; i < row; i++)
{
max = p[i][0];
for (int j = 0; j < col; j++)
{
if (p[i][j] > max)
{
max = p[i][j];
*max_row = i;
*max_col = j;
}
}
for (k = 0; k < row; k++)
{
if (p[k][*max_col] < max)
{
break;
}
}
if (k == row)
{
return max;
}
}
return INT_MAX;
}
int main()
{
int row;
int col;
int arr[3][3] = { 2,9,1,8,9,7,4,8,4 };
printf("%d\n",Andian(arr, 3,&row,&col));
printf("row: %d col: %d\n", row, col);
return 0;
}
测试结果如下