求解二維陣列中的鞍點問題:
阿新 • • 發佈:2018-11-24
鞍點:在行中最大,列中最小的數字
樣例輸入:
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]); }