矩陣的鞍點就是指它在本行中的值最大,在本列中的值最小。
求解思路:
- 求出每行的最大值MaxRow以及每列的最小值MinColumn
- 儲存行最大值的位置和列最小值的位置
- 如果行最大值得位置和列最小值的相等則輸出此鞍點(如果沒有鞍點則輸出無)
代碼如下:
#include <iostream>
#include<Cmath>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int MaxRow[1000]={0}; //儲存行最大值的行位置
int MaxColumn[1000]={0}; //儲存行最大值的列位置
int MinRow[1000]={0}; //儲存列最小值的行位置
int MinColumn[1000]={0}; //儲存列最小值的列位置
int RowMax[1000]={0}; //行最大值
int ColumnMin[1000]={0}; //列最大值
int a[n][m];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
cin>>a[i][j];
}
int count=0;
for(int i=0;i<1000;i++)
ColumnMin[i]=9999999;
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++){
if(a[i][j]>RowMax[i]){
RowMax[i]=a[i][j];
MaxRow[i]=i;
MaxColumn[i]=j;
}
if(a[j][i]<ColumnMin[i])
{
ColumnMin[i]=a[j][i];
MinColumn[i]=i;
MinRow[i]=j;
}
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if (MaxRow[i]==MinRow[j]&&MaxColumn[i]==MinColumn[j])
{
cout<<"鞍點在第"<<MaxRow[i]+1<<"行,第"<<MaxColumn[i]+1<<"列的"<<a[MaxRow[i]][MaxColumn[i]]<<endl;
count++;
}
}
}
if(count==0)
{
cout<<"無"<<endl;
}
return 0;
}