思路
行遍历,找每行最小值,记录最小值列数,找该列数最大值,记录最大值行数;
如果最大值行数等于行遍历的行数,则输出坐标点。
Description:
如果矩阵A中存在这样的一个元素A[i,j]满足条件:A[i,j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。请编程计算出m*n的矩阵A的所有马鞍点的坐标(1<=i,j<=n)。
Input:
输入m,n
然后输入数组中的每个元素
Output:
输出m*n的矩阵A的所有马鞍点坐标
Sample Input:
3 3
1 5 3
5 2 6
7 6 9
Sample Output:
3 2
#include <iostream>
#include "vector"
using namespace std;
/**
* kkmd66
* @return
*/
int main() {
int m, n;
cin >> m >> n;
//储存
vector<vector<int>> matrix(m);
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
int temp;
cin >> temp;
matrix[i].push_back(temp);
}
}
//坐标
int result_h, result_l;
//找马鞍点
for (int i = 0; i < m; ++i) {
//找出第i行最小值
int min_m = matrix[i][0], min_l=0;
for (int j = 0; j < n; ++j) {
if (matrix[i][j] < min_m) {
min_m = matrix[i][j];
min_l = j;
}
}
//找出第i行最小值所在列的最大值
int max_n = matrix[0][min_l], max_h=0;
for (int j = 0; j < m; ++j) {
if (matrix[j][max_h] > max_n) {
max_n = matrix[j][max_h];
max_h = j;
}
}
//如果最小值的行数与最大值的行数相同
if (i == max_h) {
result_h = i + 1;
result_l = min_l + 1;
//输出
cout << result_h << " " << result_l;
}
}
return 0;
}