找鞍点的算法已经很容易查找到,这里提供一种算法,不一定最简单,但应该是最好理解的了
首先看题目
然后呢,其实一个最简单的想法就是建立两个矩阵,一个就是题目中的矩阵,另外一个用来计算“个数”
直接上代码吧:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[5][5],b[5][5];
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
cin>>a[i][j];
b[i][j]=0;
}
}
//每行分别读取最大的数,并再这个数上“打点”
for(int i=0;i<5;i++)
{
int max=a[i][0],_max=0;
for(int j=1;j<5;j++)
{
if(max<a[i][j])
{
max=a[i][j];
_max=j;
}
}
b[i][_max]++;
}
//每列读取最小的数,并在这个数上“”打点
for(int i=0;i<5;i++)
{
int min=a[0][i],_min=0;
for(int j=1;j<5;j++)
{
if(min>a[j][i])
{
min=a[j][i];
_min=j;
}
}
b[_min][i]++;
}
int k=0;
//找到被打了两次点的位置就行了
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
if(b[i][j]==2)
{
k++;
cout<<i<<" "<<j;
}
}
}
if(k==0) cout<<"NONE";
return 0;
}
大学生萌新小白,如有不足之处还请各位大佬多多指正,谢谢