目的:掌握数组算法设计
内容:如果矩阵A中存在一个元素满足一下条件,即A[i][j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。设计一个程序exp6-2.cpp计算出mXn的矩阵A的所有马鞍点。
//找出每行的最小值,判断该最小值是否是所在列的最大值,若是则为马鞍点
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=15;
#define inf 0x3f3f3f
int m,n,arr[maxn][maxn];
int main()
{
int i,j,k;
while(~printf("请输入矩阵大小及矩阵:\n"))
{
memset(arr,0,sizeof(arr));
cin>>m>>n;
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
cin>>arr[i][j];
int cont=0;
for(i=0; i<m; i++)
{
int minn=inf;
int pos=0;
for(j=0; j<n; j++)//找出第i行的最小值
{
if(arr[i][j]<minn)
{
minn=arr[i][j];
pos=j;
}
}
for(k=0; k<m; k++)//判断该最小值是否是所在列的最大值
{
if(arr[k][pos]>minn)
break;
}
if(k==m)//若是则为马鞍点
{
if(cont==0)
cout<<"马鞍点:";
cout<<minn<<" ";
cont++;
}
}
if(cont==0)
cout<<"该矩阵没有马鞍点";
cout<<endl;
printf("继续操作请输入1,退出操作请输入0:\n");
int cnt;
cin>>cnt;
if(cnt==0)
break;
}
return 0;
}