求矩阵的鞍点

题目:求一个矩阵的鞍点,即行上最小而列上最大的元素。

代码:(多个最小值认为第一个为最小,更严谨的代码在最后)

cpp 复制代码
#include<iostream>
#include<time.h>
using namespace std;

int main(){
	int n,m;
	cout<<"请输入矩阵的行数和列数: "<<endl;
	cin>>n>>m;
	int a[n+1][m+1];
	srand(time(NULL));
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			a[i][j]=rand()%10;
		}
	}

//	a[1][1]=5;a[1][2]=10;a[1][3]=15;
//	a[2][1]=2;a[2][2]=7;a[2][3]=8;
//	a[3][1]=1;a[3][2]=9;a[3][3]=10;
//	cout<<"矩阵为:"<<endl; 
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}
	int cnt=0;//cnt个鞍点 
	for(int i=1;i<=n;i++){ 
		//找第i行的最小值的列数 
		int min=a[i][1],mini=1;
		for(int j=1;j<=m;j++){
			if(min>a[i][j]){
				min=a[i][j];
				mini=j; 
			}
		} 
		bool flag=true;
		//判断第mini列上a[i][mini]是否为最大
		for(int k=1;k<=n;k++){
			if(a[k][mini]>a[i][mini]){
				flag=false;
				break;
			}
		} 
		if(flag){
			cnt++;
			cout<<"鞍点:"<<a[i][mini]<<endl;
		}
	}
	if(cnt==0){
		cout<<"没有鞍点"<<endl;
	} 
	return 0;
}

代码:

cpp 复制代码
#include<iostream>
#include<time.h>
using namespace std;

void maxJ(int mini){//判断第mini列上a[i][mini]是否为最大

}
int main(){
	int n,m;
	cout<<"请输入矩阵的行数和列数: "<<endl;
	cin>>n>>m;
	int a[n][m];
//	srand(time(NULL));
//	for(int i=1;i<=n;i++){
//		for(int j=1;j<=m;j++){
//			a[i][j]=rand()%10;
//		}
//	}
	a[1][1]=5;a[1][2]=5;a[1][3]=15;
	a[2][1]=2;a[2][2]=2;a[2][3]=8;
	a[3][1]=1;a[3][2]=1;a[3][3]=10;
	cout<<"矩阵为:"<<endl; 
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cout<<a[i][j]<<" ";
		}
		cout<<endl;
	}
	int cnt=0;//cnt个鞍点 
	for(int i=1;i<=n;i++){ 
		//找第i行的最小值的列数(可能有多个)
		int minValue=a[i][1],mini[m],min_cnt=0;
		for(int j=1;j<=m;j++){
			if(minValue>a[i][j]){
				min_cnt=0;
				minValue=a[i][j];
				mini[min_cnt++]=j;
			}else if(minValue==a[i][j]){
				mini[min_cnt++]=j; 
			}
		} 
		//判断第mini列上a[i][mini]是否为最大
		bool flag=true;
		for(int mcnt=0;mcnt<min_cnt;mcnt++){
			bool flag=true;
			for(int k=1;k<=n;k++){
				if(a[k][mini[mcnt]]>a[i][mini[mcnt]]){
					flag=false;
					break;
				}
			} 
			if(flag){
				cnt++;
				cout<<"鞍点:"<<a[i][mini[mcnt]]<<" 位置:x="<<i<<",y="<<mini[mcnt]<<endl;
			}
		}
	}
	if(cnt==0){
		cout<<"没有鞍点"<<endl;
	} 
	return 0;
}
相关推荐
筏.k22 分钟前
C++ 网络编程(14) asio多线程模型IOThreadPool
网络·c++·架构
2401_8812444031 分钟前
Treap树
数据结构·算法
乌萨奇也要立志学C++33 分钟前
二叉树OJ题(单值树、相同树、找子树、构建和遍历)
数据结构·算法
网安INF35 分钟前
深度学习中的逻辑回归:从原理到Python实现
人工智能·python·深度学习·算法·逻辑回归
wsxqaz1 小时前
浏览器原生控件上传PDF导致hash值不同
算法·pdf·哈希算法
NAGNIP1 小时前
Transformer注意力机制——MHA&MQA&GQA
人工智能·算法
摘星编程1 小时前
多模态AI Agent技术栈解析:视觉-语言-决策融合的算法原理与实践
人工智能·算法·多模态ai·视觉语言融合·ai决策算法
NAGNIP1 小时前
一文搞懂KV-Cache
人工智能·算法
CoovallyAIHub1 小时前
RTMPose:重新定义多人姿态估计的“实时”标准!
深度学习·算法·计算机视觉
爱喝茶的小茶1 小时前
周赛98补题
开发语言·c++·算法