问题描述:求一个n*m阶矩阵的马鞍点
马鞍点定义:在一个矩阵中,若一个元素为该行最小值,该列最大值,则称该元素为这个矩阵的一个马鞍点
如:0 1 2 1 0 则马鞍点为a[1][0]和a[1][4]
1 2 3 2 1
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#define row 5
#define col 5
using namespace std;
int rmin[row], cmax[col];
void Matrix(int a[row][col]) //求row*col阶矩阵中的马鞍点
{
int i, j;
bool have = false;
for (i = 0; i < row; i++) //求每行最小值
{
rmin[i] = a[i][0];
for (j = 1; j < col; j++)
if (a[i][j] < rmin[i])
rmin[i] = a[i][j];
}
for (j = 0; j < col; j++) //求每列最大值
{
cmax[j] = a[0][j];
for (i = 1; i < row; i++)
if (cmax[j] < a[i][j])
cmax[j] = a[i][j];
}
for (i = 0; i<row; i++) //查询是否存在马鞍点
for (j = 0; j<col; j++)
if (rmin[i] == cmax[j])///
{
printf("a[%d][%d]=%d\n", i, j, a[i][j]);
have = true;
}
if (!have)
printf("没有马鞍点\n");
}
int main()
{
int a[row][col];
int i, j;
printf("请输入%d*%d阶矩阵:\n", row, col);
for (i = 0; i < row; i++)
for (j = 0; j < col; j++)
scanf_s("%d", &a[i][j]);
printf("矩阵中的马鞍点为:\n");
Matrix(a);
system("pause");
}编译环境:Visual Studio 2015
本文介绍了一种寻找矩阵中马鞍点的方法,并提供了一个具体的C++实现示例。马鞍点是指在一个矩阵中既是所在行的最小值又是所在列的最大值的元素。文章通过两步操作实现了这一功能:首先找到每一行的最小值和每一列的最大值,然后比较这些值以确定是否存在马鞍点。
3675

被折叠的 条评论
为什么被折叠?



