请用C语言编程找出一个M*N矩阵中的鞍点,即该位置上的元素是该行上的最大值,是该列上的最小值。如果矩阵中没有鞍点,则输出“No saddle point!” 已知函数原型: void FindSaddlePoint(int a[][N], int m, int n); 在该函数中输出有无鞍点的信息。
时间: 2024-02-12 20:09:24 浏览: 126
好的,我知道了。这是一个经典的问题,可以通过两次遍历矩阵来解决。以下是代码实现:
```c
#include <stdio.h>
#define N 100 // 定义数组大小
void FindSaddlePoint(int a[][N], int m, int n) {
int i, j, k, min, max, flag;
for (i = 0; i < m; i++) {
min = a[i][0];
for (j = 0; j < n; j++) {
if (a[i][j] < min) {
min = a[i][j];
}
}
for (k = 0; k < n; k++) {
if (a[i][k] == min) {
max = a[0][k];
for (j = 0; j < m; j++) {
if (a[j][k] > max) {
max = a[j][k];
}
}
if (a[i][k] == max) {
printf("Saddle point found at (%d,%d): %d\n", i, k, a[i][k]);
flag = 1;
}
}
}
}
if (flag != 1) {
printf("No saddle point!\n");
}
}
int main() {
int m, n, i, j, a[N][N];
printf("Enter the size of matrix (m*n): ");
scanf("%d%d", &m, &n);
printf("Enter the elements of matrix:\n");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &a[i][j]);
}
}
FindSaddlePoint(a, m, n);
return 0;
}
```
这段代码中,我们首先定义了一个 `FindSaddlePoint` 函数来寻找鞍点。在该函数中,我们首先遍历每一行,找到该行上的最小值,然后再遍历每一列,在该列上找到最大值。如果该行上的最小值也是该列上的最大值,那么就找到了一个鞍点,输出该点的位置和值。如果遍历完整个矩阵都没有找到鞍点,输出 "No saddle point!"。
在 `main` 函数中,我们先输入矩阵的大小和元素,然后调用 `FindSaddlePoint` 函数来寻找鞍点。
阅读全文