版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
文章目录
先放个oj连接
小学弟问的鞍点问题, 讲了一遍, 网上的代码实在是不利于初学者, 这里给出清晰的思路
#include <bits/stdc++.h>
using namespace std;
#define rg register
#define sc scanf
#define pf printf
typedef long long ll;
int main ( ) { // freopen( "F:\\in\\.txt" , "r" , stdin );
int a[10][10];
for ( int i = 1; i <= 5; ++i )
for ( int j = 1; j <= 5; ++j )
cin >> a[i][j];
int row = -1, col = -1;
for ( int i = 1; i <= 5; ++i ) {
int rowMaxValue = -0x3f3f3f3f, thisRow = i, thisCol;
for ( int j = 1; j <= 5; ++j ) {
if ( a[thisRow][j] > rowMaxValue ) { // 记录当前行的最大值, 横坐标, 纵坐标
rowMaxValue = a[thisRow][j];
thisCol = j;
}
}
bool flag = true; // 假设这一行中的最大值 是 这一列的最小值
for ( int tempRow = 1; tempRow <= 5; ++tempRow ) { // 遍历所有行, 检验记录的那一行的最大值 是否是 所在列的最小值
if ( a[tempRow][thisCol]<rowMaxValue ) { // 如果有比这个 假定最小值 还小的值, 显然这个记录值不是鞍点
flag = false; // 标记不是鞍点, 然后跳出循环
break;
}
}
if ( flag ) { // 如果是鞍点, 记录鞍点的坐标
row = thisRow, col = thisCol;
break;
}
}
if ( row==-1&&col==-1 ) cout << "not found" << endl;
else cout << row << " " << col << " " << a[row][col] << endl;
return 0 ;
}