c语言如何找出二维数组鞍点
时间: 2024-12-12 15:09:26 浏览: 26
在C语言中,二维数组的“鞍点”是指该数组中某个元素值既小于其上方元素也小于其右侧元素的特定位置。要找到这样的鞍点,我们可以遍历整个数组,对于每个元素,检查其上一列、下一列和左一行、右一行的值。以下是简单的步骤:
```c
#include <stdio.h>
#define ROWS 5
#define COLS 5
// 定义一个辅助结构体来比较元素
typedef struct {
int val;
int row;
int col;
} Point;
// 检查是否为鞍点
int isHillOrValley(Point p) {
if (p.val > p.prev_row && p.val > p.next_col)
return 1; // 鞍点,返回1
else if (p.val < p.prev_row && p.val < p.next_col)
return -1; // 山谷,返回-1
else
return 0; // 其他非鞍点区域
}
// 寻找鞍点
Point findPit(int arr[ROWS][COLS]) {
Point pit = {arr[0][0], 0, 0};
for (int i = 1; i < ROWS; ++i) {
for (int j = 1; j < COLS; ++j) {
Point p = {arr[i][j], i, j};
Point prev = {arr[i - 1][j], i - 1, j};
Point next = {arr[i][j + 1], i, j + 1};
if (isHillOrValley(p)) {
if (pit.val > p.val) // 更新鞍点
pit = p;
}
}
}
return pit;
}
int main() {
int arr[ROWS][COLS] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
Point pit = findPit(arr);
if (pit.val != 0) {
printf("The pit point is at (%d, %d) with value %d\n", pit.row, pit.col, pit.val);
} else {
printf("No pit found in the given array.\n");
}
return 0;
}
```
这个程序首先初始化一个初始鞍点(假设数组的第一个元素),然后遍历整个数组,每次更新鞍点如果找到更低的值。
阅读全文