题目描述:
编程求一个4×4矩阵(就是二维数组)中的鞍点,如果没有鞍点,则输出提示信息。
鞍点是二维数组中的一个元素,它在它所在那一行上最大,在它所在那一列上最小。
输入描述:
输入数据占1行,为16个整数,范围不超过int型的范围。
输出描述:
如果不存在鞍点,则输出“no saddle”;如果存在鞍点,则输出所有鞍点,每个鞍点占一行,为3个整数,分别表示鞍点的值,以及它的行号和列号(行号和列号均从1开始计起),多个鞍点先按行优先、再按列优先的顺序输出。
样例输入1:
5 12 23 56 19 28 37 46 -12 -34 6 8 97 25 -7 45
样例输出1:
8 3 4
样例输入2:
5 12 23 56 19 28 37 46 -12 -34 6 58 97 25 -7 45
样例输出2:
no saddle
样例输入3:
70 -77 -93 -25 55 -64 -36 -10 63 -91 -22 -12 55 20 -59 -81
样例输出3:
55 2 1
55 4 1
样例输入4:
28 -5 50 71 4 -44 12 18 70 30 -47 36 -54 -70 -54 -54
样例输出4:
-54 4 1
-54 4 3
-54 4 4
代码如下:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<istream>
#include<iomanip>
#include<ostream>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<fstream>
#include<stack>
#include<ctime>
#include<deque>
#include<queue>
#include <sstream>
#pragma warning (disable:4996)
using namespace std;
struct node
{
int i;
int j;
int value;
};
bool compare(node*a,node*b)
{
if (a->i == b->i)
return a->j < b->j;
else
return a->i < b->i;
}
int main()
{
int matrix[4][4]; vector<node*>v;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
cin >> matrix[i][j];
}
}
int value,flag;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
value = matrix[i][j];
flag = 1;
for (int k = 0; k < 4; k++)
{
if (matrix[k][j] < value)
{
flag = 0;
break;
}
}
if (flag == 1)
{
for (int k = 0; k < 4; k++)
{
if (matrix[i][k] > value)
{
flag = 0;
break;
}
}
}
if (flag == 1)
{
node* np = new node;
np->i = i; np->j = j; np->value = value;
v.push_back(np);
}
}
}
if (v.empty())
{
cout << "no saddle" << endl;
}
else {
sort(v.begin(), v.end(), compare);
for (auto temp : v)
{
cout << temp->value << " " << temp->i+1 << " " << temp->j+1 << endl;
}
}
}