c语言编程笔录

首页 >   > 笔记大全

笔记大全

c语言找马鞍点

更新时间:2024-01-17

问题介绍

马鞍点(Saddle Point)是指矩阵(或二维数组)中的一个元素,在其所在行上最小,在其所在列上最大。直观来说,马鞍点是指在二维数组中的一个位置,该位置的元素既不是所在行的最大值,也不是所在列的最小值。

马鞍点的查找算法

要查找一个二维数组中的马鞍点,可以使用以下的C语言代码:

#include 

#define ROWS 3
#define COLS 3

void findSaddlePoints(int matrix[ROWS][COLS]) {
    int i, j, k;
    int isSaddlePoint;
    
    printf("马鞍点的位置:\n");
    
    for (i = 0; i < ROWS; i++) {
        for (j = 0; j < COLS; j++) {
            int currentElement = matrix[i][j];
            
            isSaddlePoint = 1;
            
            // 检查当前元素是否为所在行的最小值
            for (k = 0; k < COLS; k++) {
                if (currentElement > matrix[i][k]) {
                    isSaddlePoint = 0;
                    break;
                }
            }
            
            // 检查当前元素是否为所在列的最大值
            for (k = 0; k < ROWS; k++) {
                if (currentElement < matrix[k][j]) {
                    isSaddlePoint = 0;
                    break;
                }
            }
            
            if (isSaddlePoint) {
                printf("马鞍点的位置:[%d][%d]\n", i, j);
            }
        }
    }
}

int main() { 
    int matrix[ROWS][COLS] = {{3, 5, 4}, {1, 6, 2}, {7, 8, 9}};
    
    findSaddlePoints(matrix);
    
    return 0;
}

代码解析

这段代码通过嵌套的循环遍历二维数组中的每个元素。对于每个元素,它首先检查该元素是否为所在行中的最小值,然后再检查该元素是否为所在列中的最大值。如果是,则说明该元素为马鞍点,将其位置输出。

代码中使用了一个布尔标志isSaddlePoint,用于记录当前元素是否为马鞍点。isSaddlePoint的初始值为1,表示当前元素是马鞍点的候选。如果在检查所在行或所在列时,发现有比当前元素更小或更大的元素,则将isSaddlePoint设置为0,表示当前元素不是马鞍点。

最后,程序通过调用findSaddlePoints函数来查找并输出二维数组中的所有马鞍点。在main函数中,我们定义了一个3x3的二维数组matrix,并将其作为参数传递给findSaddlePoints函数。

总结

通过以上的代码,我们可以实现在C语言中查找马鞍点的功能。这个算法的时间复杂度是O(n^3),其中n是二维数组的行或列的大小。通过遍历数组中的每个元素,并在每个元素上进行所在行和所在列的最值比较,我们可以找到所有的马鞍点。

当然,马鞍点可能存在多个,也可能不存在。因此,我们可以根据实际需求对查找到的马鞍点进行进一步的处理或输出。