找出具有m行n列二维数组Array的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1<=m,n<=10。 C语言程序
时间: 2024-11-15 07:31:11 浏览: 45
找出一个二维数组中的鞍点,即该位置上的元素在该行最大,在该列上最小 也可能没有鞍点
在C语言中,找出二维数组的"鞍点"需要遍历整个数组,并记录当前行的最大值和当前列的最小值。以下是实现这一功能的一个简单算法的示例程序:
```c
#include <stdio.h>
// 定义二维数组
#define ROWS 10
#define COLS 10
// 比较函数,用于查找最大值和最小值
static bool is_min(int val, int *min) {
if (*min == -1 || val < *min) {
*min = val;
return true;
}
return false;
}
static bool is_max(int val, int *max) {
if (*max == -1 || val > *max) {
*max = val;
return true;
}
return false;
}
int find_hill_ridge_point(int Array[ROWS][COLS]) {
int min_row[ROWS] = {0}, max_col[COLS] = {0};
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
if (is_min(Array[i][j], &min_row[i])) {
max_col[j] = -1; // 如果找到了一行的最小值,说明当前位置不可能是鞍点
} else if (is_max(Array[i][j], &max_col[j])) {
// 如果同时是最小值和最大值,则找到鞍点
if (min_row[i] != -1 && max_col[j] == -1)
return i * COLS + j;
}
}
}
return -1; // 没有找到鞍点
}
int main() {
int Array[ROWS][COLS] = {/* 初始化二维数组 */};
// ... 用实际的数值填充数组 ...
int result = find_hill_ridge_point(Array);
if (result != -1)
printf("鞍点的位置在 (%d, %d)\n", result / COLS, result % COLS);
else
printf("未找到鞍点。\n");
return 0;
}
```
在这个程序中,我们首先初始化两个一维数组`min_row`和`max_col`分别记录每一行的最小值和每一列的最大值。然后遍历数组,如果某个元素既是其所在行的最小值又是其所在列的最大值,那么就找到了鞍点。
请注意,你需要替换`Array[ROWS][COLS]`部分,用实际的二维数组内容替换它。
阅读全文