【MAC上でC++】Day 45-5.実験7-2-3行列の局所極大値(15分)を求める

1587 ワード

実験7-2-3行列の局所極大値(15分)を求める
1.タイトルの抜粋
https://pintia.cn/problem-sets/13/problems/514
2.テーマ内容
M行N列の整数行列Aが与えられ、Aの非境界要素A[i][j]が隣接する上下左右4要素より大きい場合、要素A[i][j]は行列の局所極大値であると称される.本題では,与えられた行列のすべての局所極大値とその位置を要求する.
入力形式:
マトリクスAの行数Mと列数N(3≦M,N≦20)を第1行に入力する.最後のM行は、各行にAのN個の要素の値を与える.数字の間はスペースで区切られています.
出力フォーマット:
各行は「要素値行番号列番号」の形式でローカル極大値を出力し、行、列番号は1から開始します.行番号に従って出力を増加することを要求する.同行者がローカル極大値を1つ以上持っている場合、その行はカラム番号で出力を増やします.ローカル極大値がない場合は、「None合計行数合計列数」を出力します.
サンプル1を入力:
4 5 1 1 1 1 1 1 3 9 3 1 1 5 3 5 1 1 1 1 1 1
出力サンプル1:
9 2 3 5 3 2 5 3 4
入力サンプル2:
3 5 1 1 1 1 1 9 3 9 9 1 1 5 3 5 1
出力サンプル2:
None 3 5
3.ソース参照
#include 

using namespace std;

int main()
{
    int m, n;
    int i, j;
    int a[20][20];
    int cnt;

    cin >> m >> n;

    for(i = 0; i < m; i++)
    {
        for(j = 0; j < n; j++)
        {
            cin >> a[i][j];
        }
    }

    cnt = 0;
    for(i = 1; i < m - 1; i++)
    {
        for(j = 1; j < n - 1; j++)
        {
            if((a[i][j] > a[i][j - 1]) && (a[i][j] > a[i][j + 1])
            && (a[i][j] > a[i - 1][j]) && (a[i][j] > a[i + 1][j]))
            {
                cnt++;
                cout << a[i][j] << " " << (i + 1) << " " << (j + 1) << endl;
            }
        }
    }

    if(cnt == 0)
    {
        cout << "None " << m << " " << n << endl;
    }

    return 0;
}