1.常用算法编程-鞍点

2022-05-05  本文已影响0人  ProfessorFan

1.一个二维数组中,规定第i行中最小值且是第j列中的最大值,则称该元素为二维数组(二维矩阵)的一个鞍点,编写一个算法,找出这个二维数组中所有的鞍点

解题思路:
1.找出每一行中最小的数字
2.该行最小的数字,所在的列的最大数字
3.判断两个数字 是否相等 && 两个数字 的 i,j 是否相等,如果相等,这个就是鞍点,如果不相等,就不是鞍点

示例函数代码

void saddle (int a[][4],int n,int m){
    
    int w_i = 0, w_j = 0, min,max;
    for (int i = 0; i < n; i++) {
        
        min = a[i][0];
        w_i = i;
        w_j = 0;
        for (int j = 1; j < m; j++) {
            if (a[i][j] < min) {
                min = a[i][j]; // 这里是找出每一行最小的 数字
                w_i = i;
                w_j = j;
            }
        }
        printf("第 %d 行 最小的值为 %d \n",w_i,min);

        // 判断每一行最小的那个数字,是不是该列的最大的值
        max = a[0][w_j];
        int l_x = 0;
        for (int i = 0; i < n; i++) {
            if (a[i][w_j] > max) {
                max = a[i][w_j];
                l_x = i;
            }
        }
        
        if (max == min  && l_x == w_i) {
            printf("第 %d行 第 %d列 %d 是一个鞍点 \n",l_x,w_j,max);
        }
    }
}

运行结果


鞍点运行结果.png
上一篇下一篇

猜你喜欢

热点阅读