矩阵的马鞍点

矩阵的马鞍点

描述

若在矩阵A中存在一个元素a i,j(0≤i≤n-1,0≤j≤m-1),该元素是第i行元素中最小值且又是第j列元素中最大值,则称此元素为该矩阵的一个马鞍点。假设以二维数组存储矩阵A,试设计一个求该矩阵所有马鞍点的算法。首行输入矩阵的的大小n*m, 然后n行每行输入m个元素。

测试用例1:

3 3

1 2 3

4 5 6

7 8 9

运行结果:

A[2][0]=7

测试用例2:

5 5

9 7 6 8 3

20 26 22 25 23

28 36 16 30 43

20 21 22 23 54

1 2 3 4 5

运行结果:

没有鞍点

测试用例3:

4 4

9 7 6 8

20 26 22 25

28 36 25 30

1 2 3 4

运行结果:

A[2][2]=25

因为给出的代码有全局变量,我不太喜欢用全局变量所以我把n,m做成参数传进去了。

#include <iostream>
#include <stdio.h>
#define N 20
using namespace std;
void MinMax(int A[N][N],int n,int m) {
	bool have = false;
	int i,j;
	int min[n];
	int	max[m];
	for (i = 0; i < n; i++) {	//计算出每行的最小值元素,放入min[0..M-1]之中
		int minNumber=A[i][0];
		for(j = 0; j < m; j++){
			if(minNumber > A[i][j]){
				minNumber = A[i][j];
			}
		}
		min[i] = minNumber;
	}
	for (j = 0; j < m; j++) {	//计算出每列的最大值元素,放入max[0..N-1]之中
		int maxNumber = A[0][j];
		for(i = 0 ;i < n; i++){
			if(maxNumber < A[i][j]){
				maxNumber = A[i][j];
			}
		}
		max[j] = maxNumber;
	}
	for (i = 0; i < n; i++)		//判定是否为马鞍点
		for (j = 0; j < m; j++)
			if (min[i] == max[j]) {
				printf("A[%d][%d]=%d\n", i, j, A[i][j]);	//显示马鞍点
				have = true;
			}
	if (!have)
		printf("没有鞍点\n");
}
int main() {
    int n, m;//行 列
	cin >> n >> m;
	int matrix[20][20];
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cin >> matrix[i][j];
		}
	}
	MinMax(matrix,n,m);			//调用MinMax()找马鞍点
	return 0;
}
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值