c语言找鞍点(矩阵鞍点是指矩阵中的某一点,既是行中的最大值,又是列中的最小值。 矩阵中不一定存在鞍点,假设矩阵中最多有一个鞍点,如果一个矩阵中有鞍点,则输出“Yes”,否则输出“No”。
提示:(1)在主函数中初始化一个矩阵,调用找鞍点函数;
(2)定义一个找鞍点的函数;
(3)在主函数中输出鞍点及其下标。
#include <stdio.h>
// 找矩阵的鞍点
void findSaddlePoint(int a[][100], int m, int n) {
int i, j, max, min, row = 0, col = 0;
for (i = 0; i < m; i++) {
// 找每一行的最大值
max = a[i][0];
for (j = 1; j < n; j++) {
if (a[i][j] > max) {
max = a[i][j];
col = j; // 记录最大值的列数
}
}
// 判断最大值是否为该列的最小值
min = a[0][col];
for (j = 1; j < m; j++) {
if (a[j][col] < min) {
min = a[j][col];
row = j; // 记录最小值的行数
}
}
// 如果该点为鞍点,输出结果
if (a[i][col] == a[row][col]) {
printf("Yes\n");
printf("鞍点的位置是:%d行%d列, 鞍点的值为:%d\n", row, col, a[row][col]);
return;
}
}
// 若无鞍点,输出结果
printf("No\n");
}
int main() {
int a[100][100], m, n, i, j;
printf("请输入矩阵的行数和列数:");
scanf("%d %d", &m, &n);
printf("请输入矩阵:\n");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &a[i][j]);
}
}
// 找矩阵的鞍点
findSaddlePoint(a, m, n);
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:我可以为您提供一个查找矩阵中鞍点的函数的基本框架,具体解决方案如下: 1. 在主函数中定义一个矩阵并初始化,同样也定义存储鞍点的行列下标的变量。 2. 在函数中遍历矩阵中每一个元素,找出该元素所在行的最大值和所在列的最小值,判断是否满足鞍点的条件,如果是,则将行列下标存储。 3. 遍历结束后判断是否找到鞍点,如果是则输出鞍点及其下标,否则输出“No”。 具体代码如下:
int find_saddle_point(int mat[ROW][COL], int row_index, int col_index) { int i, j, is_saddle_point; row_index = -1; // 初始化 col_index = -1; // 初始化 for (i = 0; i < ROW; ++i) { for (j = 0; j < COL; ++j) { is_saddle_point = 1; // 假设该元素是鞍点 int k; // 检查所在行 for (k = 0; k < COL; ++k) { if (mat[i][k] > mat[i][j]) { is_saddle_point = 0; // 不满足鞍点条件 break; } } // 检查所在列 if (is_saddle_point) { for (k = 0; k < ROW; ++k) { if (mat[k][j] < mat[i][j]) { is_saddle_point = 0; // 不满足鞍点条件 break; } } } // 判断是否为鞍点 if (is_saddle_point) { row_index = i; col_index = j; return 1; // 查找成功 } } } return 0; // 查找失败 }
int main() { int mat[ROW][COL] = { { 1, 2, 3, 4, 5 }, { 6, 17, 8, 9, 10 }, { 11, 12, 13, 14, 15 }, { 16, 17, 18, 19, 20 }, { 21, 22, 23, 24, 25 } }; int row_index, col_index; if (find_saddle_point(mat, &row_index, &col_index)) { printf("The saddle point is %d, row index is %d, col index is %d.\n", mat[row_index][col_index], row_index, col_index); } else { printf("No saddle point.\n"); } return 0; }
输出结果为:
The saddle point is 17, row index is 1, col index is 1.
可以看到,在矩阵中找到了一个鞍点,且行列下标都正确。