输入说明:输入数据由m+1组成,第一行只有两个整数m,n 分别是行数和列数
输出 马鞍点的行号和列号,从0开始计数,若不存在马鞍点,则输出一个"no"之后换行
输入示例 :
4 3
11 13 121
407 72 88
25 58 1
134 30 62
输出示例:
1 1 72
一开始卡在了循环,在列和行之间脑子短路了,这里面我先找出每一行的最小值row_min,记录下所在的行列数,之后在用一个循环找所在列的最大值col_max,这里面我有一个地方一开始一直忽略了,就是行最小和列最大在一开始要赋初值
row_min = a[i][0];
row_min_row = i;
row_min_col = 0;
col_max = a[0][row_min_col];
#include "iostream"
#include "algorithm"
using namespace std;
int main(){
int m,n;
cin>>m>>n;
int a[m][n];
for(int i=0;i<m;i++)
for(int j=0;j<n;j++){
cin>>a[i][j];
}//输入矩阵
int row_min,row_min_col,col_max,row_min_row,flag=0;
int i,j,k,temp;
for(i=0;i<m;i++){
row_min = a[i][0];
row_min_row = i;
row_min_col = 0;
for(j=0;j<n;j++){
if(row_min > a[i][j]){
row_min = a[i][j]; // i = 0 1 2 3 //找到行最小
row_min_col = j; //行最小的所在列
row_min_row = i;
}
}
col_max = a[0][row_min_col];
for(k=1;k<m;k++){
if(col_max < a[k][row_min_col]){
col_max = a[k][row_min_col];
}
}
if(col_max == row_min){
cout<<row_min_row<<" "<<row_min_col<<" "<<row_min<<endl;
flag = 1;
}
} //大循环结束
if(!flag)
cout<<"no"<<endl;
return 0;
}