设计算法求mxn阶的马鞍点,马鞍点为矩阵中的元素A[i][j],其是第[i]行中值最小的,且是第j列中值最大的元素C语言
时间: 2024-09-28 09:11:56 浏览: 35
曲折矩阵选择:以曲折顺序遍历mxn矩阵,并保留前k个元素。 其他设置为零。-matlab开发
在C语言中,我们可以设计一个算法来查找给定的m x n矩阵中的马鞍点。马鞍点的特点是一个元素同时满足两部分条件:它在所在行是最小的,而在所在列是最大的。这里是一种基本的线性扫描方法:
```c
#include <stdio.h>
// 定义函数来比较两个整数
int compare(int a, int b) {
return a <= b ? -1 : a > b ? 1 : 0;
}
// 检查并返回矩阵中的马鞍点
int findHorseRacePoint(int matrix[m][n]) {
// 初始化最大行值和最小列值
int minRow[n], maxCol[m];
for (int i = 0; i < m; i++) {
maxCol[i] = matrix[0][i];
}
for (int j = 0; j < n; j++) {
minRow[j] = matrix[j][0];
}
// 更新最大列值和最小行值
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
if (compare(matrix[i][j], maxCol[j]) == -1) { // 如果当前元素大于最大列值
maxCol[j] = matrix[i][j]; // 更新最大列值
}
if (compare(matrix[i][j], minRow[i]) == 1) { // 如果当前元素小于最小行值
minRow[i] = matrix[i][j]; // 更新最小行值
}
}
}
// 找到第一个满足条件的元素
int saddlePoint = -1;
for (int i = 0; i < m && saddlePoint == -1; i++) {
for (int j = 0; j < n && saddlePoint == -1; j++) {
if (maxCol[j] == matrix[i][j] && minRow[i] == matrix[i][j]) {
saddlePoint = matrix[i][j];
}
}
}
return saddlePoint;
}
int main() {
int matrix[5][5] = {{5, 9, 2, 6, 3},
{4, 7, 8, 1, 5},
{6, 2, 3, 4, 1},
{3, 9, 7, 8, 4},
{2, 6, 1, 5, 9}};
int result = findHorseRacePoint(matrix);
if (result != -1) {
printf("The horse race point is: %d\n", result);
} else {
printf("No horse race point found.\n");
}
return 0;
}
```
这个程序首先初始化两个数组`minRow`和`maxCol`分别存储每行的最小值和每列的最大值。然后遍历矩阵,更新这两个数组。最后通过交叉检查行最小值和列最大值是否相等来找到马鞍点。
阅读全文