【数据结构】实验七 求一个矩阵的马鞍点

实验内容:
如果矩阵A中存在这样的一个元素,满足条件:
A[i][j]是第i行中值最小的元素,且是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。
设计程序计算一个m*n矩阵A的所有马鞍点。
实验目的:掌握数组基本操作及算法设计。

#include<iostream>
#define MAX 50
using namespace std;

void InitArray(int a[MAX][MAX], int m, int n) // 初始化矩阵中的元素
{
	cout << "请依次输入矩阵中的元素:" << endl;
	for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cin >> a[i][j];
		}
	}
	cout << "矩阵中的元素初始化成功!" << endl;
}

void LineMin_RowMax(int a[MAX][MAX], int m, int n) // 求矩阵a的马鞍点
{
	int ans[MAX];
	int count = 0;
	for (int line = 0; line < m; line++) // 一行一行的遍历
	{
		int min = a[line][0]; // 储存行的最小值
		int min_j = 0; // 储存行的最小值的下标
		for (int j = 0; j < n; j++) // 找到第line行的最小值
		{
			if (min > a[line][j])
			{
				min = a[line][j];
				min_j = j;
			}
		}
		int max = a[0][min_j]; // 储存列的最大值
		int max_i = 0; // 储存列的最大值的下标
		for (int i = 0; i < m; i++) // 找到第min_j列的最大值
		{
			if (max < a[i][min_j])
			{
				max = a[i][min_j];
				max_i = i;
			}
		}
		if (min == max) // 判断是否为马鞍点
		{
			if(count == 0)
				cout << "该矩阵中的马鞍点如下:" << endl;
			cout << "第" << max_i + 1 << "行 第" << min_j + 1 << "列 >> " << min << endl; // 输出马鞍点
			count++;
		}
	}
	if (count == 0)
	{
		cout << "该矩阵不存在马鞍点!" << endl;
		return;
	}
}

int main()
{
	int a[MAX][MAX] = { 0 }; // 定义一个数组 其内所有元素初始化为 0 
	int m, n; // 行数与列数
	cout << "请输入矩阵的行数:";
	cin >> m;
	cout << "请输入矩阵的列数:";
	cin >> n;
	InitArray(a, m, n); // 初始化矩阵中的元素
	LineMin_RowMax(a, m, n); // 找到所有马鞍点 并输出
	return 0;
}
  • 5
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张鱼·小丸子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值