1. 程式人生 > >C++求矩陣的鞍點

C++求矩陣的鞍點

矩陣的鞍點就是指它在本行中的值最大,在本列中的值最小。

求解思路:

  1. 求出每行的最大值MaxRow以及每列的最小值MinColumn
  2. 儲存行最大值的位置和列最小值的位置
  3. 如果行最大值得位置和列最小值的相等則輸出此鞍點(如果沒有鞍點則輸出無)

程式碼如下:

#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; }