1. 程式人生 > >求解二維陣列中的鞍點問題:

求解二維陣列中的鞍點問題:

鞍點:在行中最大,列中最小的數字

樣例輸入
4 5 9
2 3 8
6 7 10
樣例輸出
8

程式碼實現

#include<stdio.h>
const int M=3;   //陣列的行數
const int N=3; 	  //陣列的列數
void saddlePoint(int mat[][M],int m,int n,int *maxRow,int *maxCol); //求解鞍點
void saddlePoint(int mat[][M],int m,int n,int *maxRow,int *maxCol){
	int i,j;
	int maxValue;
	int minValue;
	*maxRow=0;*maxCol=0; 
	for(i=0;i<m;i++){
		maxValue=mat[i][0];
		for(j=1;j<n;j++){
			if(maxValue<mat[i][j]){
				maxValue=mat[i][j];
				*maxRow=i;
				*maxCol=j;
			}
		}
		minValue=mat[0][*maxCol];
		int minRow=0;
		for(j=1;j<m;j++){
			if(minValue>mat[j][*maxCol]){
				minValue=mat[j][*maxCol];
				minRow=j;
			}
		}
		if(minRow==(*maxRow)){ //判斷列中的最小數是否等於行最大數
			return;
		}
	}
}
int main(){
	int arr[M][N]={{4,5,9},{2,3,8},{6,7,10}};
	int maxR,maxC;
	saddlePoint(arr,M,N,&maxR,&maxC);
	printf("%d",arr[maxR][maxC]); 
}