1.Analyse
过程简单,分别找每行最小记在数组1 中,每列最大记在数组2 中,但是复杂度不敢想。
时间复杂度O(n^2),空间复杂度乌拉乌拉。
2.Code Print
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
//马鞍点
int main(){
int data[3][3]={{6,7,5},
{1,3,2},
{3,9,4}};//原数组
int row_min[3]={0}; int column_max[3]={0};//分别找行row—min,列column_max
int i,j,temp;
for(i=0;i<3;i++){
temp=0;
for(j=1;j<3;j++){
if(data[i][j] < data[i][temp]){
temp=j;
}
}row_min[i]=temp;
}
for(j=0;j<3;j++){
temp=0;
for(i=1;i<3;i++){
if(data[i][j] > data[temp][j]){
temp=i;
}
}column_max[j]=temp;
}printf("原数组:\n");
for(i=0;i<3;i++){
cout<<"\t ";
for(j=0;j<3;j++){
if(j<2){
cout<<data[i][j]<<" ";
}else{
cout<<data[i][j];
}
}if(i<2){
cout<<endl;
}
}
cout<<endl; printf("i行最小坐标,j列最大坐标:\n");
for(i=0,j=0;i<3,j<3;i++,j++){//表明已经符合条件的行点,列点
cout<<i<<"行"<<i<<row_min[i]<<" || "<<j<<"列"<<column_max[j]<<j<<endl;
}printf("所有马鞍点:坐标 数值\n");
for(i=0;i<3;i++){
for(j=0;j<3;j++){
if((i*10+row_min[i]) == (column_max[j]*10+j)){//i行最小坐标[i][row_min[i]]化成数值与J列最大[column_max[j]][J]化成数值
cout<<"\t "<<column_max[j]<<row_min[i]<<" "<<data[column_max[j]][row_min[i]]<<endl;//比较如果相同,输出
}
}
}
return 0;
}
3.End