计算鞍点
#include <iostream>
using namespace std;
int main() {
int n, m,cnt=0;
cin >> m >> n;
int a[105][105];
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
cin >>a[i][j];
}
}
for (int i = 1; i <= m; i++) {
int maxj=1;
for (int j = 2; j <= n; j++) {
if(a[i][j]>a[i][maxj])maxj=j;
}
int s=1;
for(int j=1;j<=m;j++)
{
if(a[j][maxj]<a[i][maxj])
{
s=0;
break;
}
}
if(s)
{printf("%d %d %d\n",i,maxj,a[i][maxj]);
cnt++;}
}
if(cnt==0)cout<<"No";
return 0;
}
- 判断该最大值是否满足特定条件:接着定义变量s并初始化为 1,用于标记是否满足后续的条件。然后通过另一个for循环for (int j = 1; j <= m; j++)遍历二维数组的每一行(索引为j),通过if (a[j][maxj] < a[i][maxj])判断在第maxj列上,其他行(索引为j)对应位置的元素是否小于当前行(索引为i)该列的元素,如果存在小于的情况,就说明不满足条件,将s置为 0,并通过break跳出循环(因为只要发现有不满足条件的行,就无需再继续比较了)。如果经过上述比较后,s的值仍然为 1,就意味着当前行(索引为i)在其最大值所在列(索引为maxj)上的元素是整个二维数组该列元素中的最大值,满足特定条件。此时通过printf("%d %d %d\n", i, maxj, a[i][maxj]);输出当前行索引i、最大值所在列索引maxj以及该最大值a[i][maxj],并且将cnt自增 1,表示找到了一个满足条件的元素。