C语言代码 递归函数 【问题描述】 一个矩阵的鞍点是指矩阵的一个元素,它只是所在行的最大值,同时又是所在列的最小值。 例如下面的55矩阵中,第4行第1列 的8就是这个矩阵的鞍点。 11 3 5 6 9 12 4 7 8 10 10 5 6 9 11 8 6 4 7 2 15 10 11 20 25 用户给定正整数 m 和 n, 表示矩阵的行数和列数 ,然后给出 mn 个整数,表示矩阵的具体数据。 请输出鞍点所在的行、列,以及鞍点的具体数据。 注意:如果矩阵不存在鞍点,请输出 "Not found" 【样例输入】 5 5 11 3 5 6 9 12 4 7 8 10 10 5 6 9 11 8 6 4 7 2 15 10 11 20 25 【样例输出】 4 1 8 【样例输入】 4 6 48 11 3 5 6 9 9 12 4 7 8 10 7 10 5 6 9 11 11 8 6 4 7 2 【样例输出】 Not found 【样例输入】 7 3 7 9 8 3 5 6 9 5 4 1 9 2 7 6 2 4 3 1 5 4 6 【样例输出】 Not found 【样例输入】 7 3 17 29 8 23 5 26 9 5 4 41 9 24 67 6 21 74 3 18 95 4 60 【样例输出】 3 1 9
时间: 2024-01-01 11:04:45 浏览: 120
[例]有一个×矩阵求所有元素最大值-C语言---第八章课件
以下是C语言代码实现:
```c
#include <stdio.h>
#define MAX_SIZE 100
int matrix[MAX_SIZE][MAX_SIZE]; // 定义矩阵
void find_saddle_point(int m, int n, int i, int j) {
int k;
for (k = 0; k < n; k++) { // 判断所在行是否最大值
if (matrix[i][k] > matrix[i][j]) {
return;
}
}
for (k = 0; k < m; k++) { // 判断所在列是否最小值
if (matrix[k][j] < matrix[i][j]) {
return;
}
}
printf("%d %d %d\n", i + 1, j + 1, matrix[i][j]); // 输出鞍点信息
}
void search_saddle_point(int m, int n, int i, int j) {
if (i == m) { // 遍历完整个矩阵,结束递归
printf("Not found\n");
return;
}
if (j == n) { // 遍历完一行,递归到下一行
search_saddle_point(m, n, i + 1, 0);
return;
}
find_saddle_point(m, n, i, j); // 判断当前元素是否为鞍点
search_saddle_point(m, n, i, j + 1); // 递归到下一个元素
}
int main() {
int m, n, i, j;
scanf("%d %d", &m, &n);
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &matrix[i][j]);
}
}
search_saddle_point(m, n, 0, 0); // 从矩阵左上角开始遍历
return 0;
}
```
解释一下代码:
- `matrix`数组保存输入的矩阵,`MAX_SIZE`为数组的最大大小。
- `find_saddle_point`函数判断当前元素是否为鞍点,如果是,则输出鞍点信息。
- `search_saddle_point`函数从矩阵的左上角开始遍历,判断每个元素是否为鞍点,如果找到鞍点则输出信息,否则递归到下一个元素。
- `main`函数中,首先读入矩阵的行数和列数,然后读入矩阵的数据,并调用`search_saddle_point`函数遍历矩阵。
注意事项:
- 需要注意矩阵下标从0开始的问题。
- 在`find_saddle_point`函数中,需要遍历整个所在行和所在列,找到最大值和最小值。
阅读全文