7.8求二维数组的马鞍点

找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列最小。也可能没有鞍点。

下面是我做这道题时候的代码,如果有不正确的地方,还望大家多多指教。

//马鞍点:矩阵中在行上最大,列上最小的点。
#include <stdio.h>
#define ROW 10
#define COLUMN 10

int i,j,m,n;
int arr[ROW][COLUMN];

int main(){
    void maandian(int arr[ROW][COLUMN]);
    printf("请输入矩阵的行m,m<=%d
",ROW);
    printf("m=");
    scanf("%d", &m);
    printf("请输入矩阵的列n,n<=%d
",COLUMN);
    printf("n=");
    scanf("%d", &n);
    //为矩阵赋初值
    printf("请为矩阵的元素输入初始值:
");
    for(i=0; i < m; i++)
    {
        for(j=0; j < n; j++)
        scanf("%d",&arr[i][j]);
    }
    //打印该矩阵
    printf("您输入的矩阵为:
");
    for(i=0; i<m; i++)
    {
        for(j=0; j<n; j++)
            {
            printf("%4d",arr[i][j]);
            }
        printf("
");
    }

//调用求马鞍点的函数
maandian(arr);

return 0;
}

void maandian(int arr[ROW][COLUMN]){

    int d,flag,num=0;
    for(i=0; i<m; i++){
        for(j=0; j<n; j++){
            flag=1;    //注意标记放的位置
            
            //要找行上最大的点,所以如果比行上的任意一个点小就跳过
            for(d=0; d<n; d++){
                if(arr[i][j]<arr[i][d]) 
                flag=0;
            }
            if(flag==0) continue;

            for(d=0; d<m; d++){
            if(arr[i][j]>arr[d][j]) flag=0;
            }
            if(flag==0) continue;
            //如果两个continue都没跳过,说明找到一个马鞍点
            num++;
            printf("第%d个马鞍点位于矩阵的第%d行,%d列,其值为%d
",num,i+1,j+1,arr[i][j]);
        }
    }
    if(num==0)printf("该矩阵不存在马鞍点");
    printf("共有%d个马鞍点
",num);
}
原文地址:https://www.cnblogs.com/Allen-win/p/7218080.html