【描述】
在一个m×n的山地上,已知每个地块的平均高程,请求出所有山顶所在的地块(所谓山顶,就是其地块平均高程不比其上下左右相邻的四个地块每个地块的平均高程小的地方)。
【输入】
第一行是两个整数,表示山地的长m(5≤m≤20)和宽n(5≤n≤20),整数以空格间隔。
其后m行为一个m×n的整数矩阵,表示每个地块的平均高程。每行的整数间以空格间隔。
【输出】
输出所有山顶所在地块的位置。每行一个。按先m值从小到大,再n值从小到大的顺序输出。
【输入示例】
105
076 81 34 66
113 58 4 40
524 17 6 65
1313 76 3 20
836 12 60 37
4253 87 10 65
4225 47 41 33
7169 94 24 12
9211 71 3 82
9190 20 95 44
【输出示例】
0 2
0 4
2 1
2 4
3 0
3 2
4 3
5 2
5 4
7 2
8 0
8 4
9 3
【C代码】
---------------
#include<stdio.h>
intmain(void) {
int matrix[21][21];
int i, j, m, n;
int x, y, flag;;
scanf("%d%d", &m, &n);
for(i = 0; i < m; ++i)
for(j = 0; j < n; ++j)
scanf("%d", &matrix[i][j]);
for(i = 0; i < m; ++i) {
for(j = 0; j < n; ++j) {
flag = 1;
/* 上方 */
x = i - 1;
y = j;
if(flag == 1 && x >= 0)
if(matrix[i][j] < matrix[x][y])
flag = 0; /* 不是山顶 */
/* 下方 */
x = i + 1;
y = j;
if(flag == 1 && x < m)
if(matrix[i][j] < matrix[x][y])
flag = 0; /* 不是山顶 */
/* 左方 */
x = i;
y = j - 1;
if(flag == 1 && y >= 0)
if(matrix[i][j] < matrix[x][y])
flag = 0; /* 不是山顶 */
// 右方
x = i;
y = j + 1;
if(flag == 1 && y < n)
if(matrix[i][j] < matrix[x][y])
flag = 0; /* 不是山顶 */
if(flag)
printf("%d %d\n", i, j);
}
}
return 0;
}