11、
//鞍点:行最大,列最小
//先找到某一行最大的元素,将其列下标保存(最大元素 and 其个数)
//然后从最大值对应的列中找到最小值。如果最大值和最小值相同,即为鞍点
//一行一行的处理
#include<stdio.h>
#define MAXSIZE_ROW 3
#define MAXSIZE_COL 3
//该函数用来找到索引为row的行的最大值元素的列下标及其个数
void getMaxElemColIndex(int matrix[][MAXSIZE_COL],int row,int colIndexArray[],int *length){
int max=matrix[row][0];
colIndexArray[0]={0};
*length=1;
for(int i=1;i<MAXSIZE_ROW;i++){
if(matrix[row][i]>max){//若存在更大值,更新列下标数组
colIndexArray[0]=i;
*length=1;
max=matrix[row][i];
}
if(matrix[row][i]==max){//有多个相同的最大值
colIndexArray[*length]=i;
*length+=1;
}
}
}
//该函数用来判断该点是否为鞍点
void isSaddlePoint(int matrix[][MAXSIZE_COL],int colIndex,int maxOfRow){
int min=matrix[0][colIndex];
for(int i=1;i<MAXSIZE_ROW;i++){
if(matrix[i][colIndex]<min)
min=matrix[i][colIndex];
}
if(min==maxOfRow)
printf("%d\n",maxOfRow);
}
//该函数用于输出第row行所有鞍点
void printSaddlePoint(int matrix[][MAXSIZE_COL],int row,int colIndexArray[],int length){
int max=matrix[row][colIndexArray[0]];
for(int i=0;i<length;i++){
isSaddlePoint(matrix,colIndexArray[i],max);
}
}
int main(){
int matrix[3][3]={8,9,10,3,3,3,11,12,13};
for(int row=0;row<3;row++){
int colIndexArray[MAXSIZE_COL];
int length=0;
getMaxElemColIndex(matrix,row,colIndexArray,&length);
printSaddlePoint(matrix,row,colIndexArray,length);
}
return 0;
}//鞍点:行最大,列最小
//先找到某一行最大的元素,将其列下标保存(最大元素 a