找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。用c语言表达
时间: 2024-11-24 22:14:47 浏览: 40
在C语言中,查找二维数组中的鞍点可以采用双重循环遍历的方式。一个元素既是该行的最大值又是该列的最小值,才能被认为是鞍点。下面是一个简单的算法实现:
```c
#include <stdio.h>
// 定义一个函数找出二维数组中的鞍点
void findHill(int arr[][N], int rows, int cols) {
int maxRow[N], minCol[N]; // 用于记录每行最大值和每列最小值
// 初始化最大值数组
for (int i = 0; i < rows; i++) {
maxRow[i] = arr[i][0];
}
// 更新每行最大值
for (int j = 1; j < cols; j++) {
for (int i = 0; i < rows; i++) {
if (arr[i][j] > maxRow[i]) {
maxRow[i] = arr[i][j];
}
}
}
// 初始化最小值数组
for (int i = 0; i < cols; i++) {
minCol[i] = arr[0][i];
}
// 更新每列最小值
for (int i = 1; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (arr[i][j] < minCol[j]) {
minCol[j] = arr[i][j];
}
}
}
// 遍历寻找鞍点
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (arr[i][j] == maxRow[i] && arr[i][j] == minCol[j]) {
printf("(%d,%d)\n", i, j); // 如果找到鞍点,打印其坐标
}
}
}
}
int main() {
int N = 5;
int arr[N][N] = { {8, 5, 3, 6, 7},
{4, 8, 1, 9, 2},
{1, 3, 5, 7, 1},
{6, 7, 2, 1, 4},
{5, 6, 8, 9, 5} }; // 示例二维数组
int rows = sizeof(arr) / sizeof(arr[0]);
int cols = sizeof(arr[0]) / sizeof(arr[0][0]);
findHill(arr, rows, cols);
return 0;
}
```
这个程序首先计算每一行的最大值和每一列的最小值,然后在原数组中找出同时满足这两个条件的元素,即它们分别是其所在行的最大值和所在列的最小值。
阅读全文