08-2. 行列の局部の極大値を求めます(15)

1322 ワード

M行N列の整数行列Aが与えられ、Aの非境界要素A[i][j]が隣接する上下左右4要素より大きい場合、要素A[i][j]は行列の局所極大値であると称される.本題では,与えられた行列のすべての局所極大値とその位置を要求する.
入力形式:
1行目に与えられる行列Aの行数Mと列数N(3<=M、N<=20)を入力する.最後の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
#include
int main()
{
	int i=0,j=0;
	int k=0;
	scanf("%d %d",&i,&j);
	int a[i][j];
	int r=0,s=0;
	for(r=1;r<=i;r++)   //input
	{
		for(s=1;s<=j;s++)
		{
			if(s==j)
			{
				scanf("%d",&a[r-1][s-1]);
			}
			else
			{
				scanf("%d ",&a[r-1][s-1]);
			}
		}
	}
	for(r=1;r<=i-2;r++)   //output
	{
		for(s=1;s<=j-2;s++)
		{
			if(a[r][s]>a[r-1][s]&&a[r][s]>a[r][s-1]&&a[r][s]>a[r+1][s]&&a[r][s]>a[r][s+1])
			{
				printf("%d %d %d
",a[r][s],r+1,s+1); k=1; } } } if(k==0) { printf("None %d %d",i,j); } return 0; }