鞍点是一个矩阵中的特定元素,它是其所在行中的最大数,同时也是其所在列中的最小数。
为了找出矩阵的鞍点,我们需要进行以下步骤:
- 1. 遍历矩阵的每一行,找出每一行的最大值及其列索引。
- 2. 使用上一步得到的列索引,检查对应列中的元素是否也是该列的最小值。
- 3. 如果一个元素同时满足这两个条件,那么它就是鞍点。
- 4. 如果没有元素满足这些条件,输出“NO”。
下面是使用C语言解决这个问题的代码示例:
#include <stdio.h>
#define ROWS 3
#define COLS 4
int main() {
int matrix[ROWS][COLS];
int maxInRow, minInCol, saddlePointFound = 0;
int i, j, k;
// 输入矩阵
printf("请输入一个 %d*%d 的矩阵:\n", ROWS, COLS);
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
scanf("%d", &matrix[i][j]);
}
}
// 寻找鞍点
for (i = 0; i < ROWS; i++) {
maxInRow = matrix[i][0];
int maxColIndex = 0;
// 找到每行的最大值
for (j = 1; j < COLS; j++) {
if (matrix[i][j] > maxInRow) {
maxInRow = matrix[i][j];
maxColIndex = j;
}
}
// 检查找到的最大值是否也是所在列的最小值
minInCol = maxInRow;
for (k = 0; k < ROWS; k++) {
if (matrix[k][maxColIndex] < minInCol) {
minInCol = matrix[k][maxColIndex];
}
}
// 如果同时是行中最大和列中最小
if (minInCol == maxInRow) {
printf("鞍点是: %d 在 (%d, %d)\n", maxInRow, i, maxColIndex);
saddlePointFound = 1;
break;
}
}
if (!saddlePointFound) {
printf("NO\n");
}
return 0;
}
这个程序会提示用户输入一个3x4的矩阵,然后它会查找并输出矩阵的鞍点。如果没有鞍点,它将输出“NO”。 |