/*===================================== 寻找山顶 总时间限制: 1000ms 内存限制: 65536kB 描述 在一个m×n的山地上,已知每个地块的平均高程,请求出所有山顶所在的地块(所谓山顶,就是其地块平均高程不比其上下左右相邻的四个地块每个地块的平均高程小的地方)。 输入 第一行是两个整数,表示山地的长m(5≤m≤20)和宽n(5≤n≤20)。 其后m行为一个m×n的整数矩阵,表示每个地块的平均高程。每行的整数间用一个空格分隔。 输出 输出所有上顶所在地块的位置。每行一个。按先m值从小到大,再n值从小到大的顺序输出。 样例输入 10 5 0 76 81 34 66 1 13 58 4 40 5 24 17 6 65 13 13 76 3 20 8 36 12 60 37 42 53 87 10 65 42 25 47 41 33 71 69 94 24 12 92 11 71 3 82 91 90 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
解析:输入二维数组,二重循环检测每一个元素,假如是山顶则输出其坐标。 ======================================*/
1 #include<stdio.h> 2 int main() 3 { 4 int m,n,i,j; 5 int a[22][22]; 6 int flag; 7 int x,y; 8 freopen("5.in","r",stdin); 9 freopen("resullt.out","w",stdout); 10 scanf("%d%d",&m,&n); 11 for(i=0;i<m;i++) 12 { 13 for(j=0;j<n;j++) 14 { 15 scanf("%d",&a[i][j]); 16 } 17 } 18 for(i=0;i<m;i++) 19 { 20 for(j=0;j<n;j++) 21 { 22 flag=1; 23 24 x=i-1; 25 y=j; 26 if(flag==1&&x>=0) 27 { 28 if(a[i][j]<a[x][y]) 29 { 30 flag=0; 31 } 32 } 33 x=i; 34 y=j+1; 35 if(flag==1&&y<n) 36 { 37 if(a[i][j]<a[x][y]) 38 { 39 flag=0; 40 } 41 } 42 x=i; 43 y=j-1; 44 if(flag==1&&y>=0) 45 { 46 if(a[i][j]<a[x][y]) 47 { 48 flag=0; 49 } 50 } 51 x=i+1; 52 y=j; 53 if(flag==1&&x<m) 54 { 55 if(a[i][j]<a[x][y]) 56 { 57 flag=0; 58 } 59 } 60 if(flag)//flag==1 61 { 62 printf("%d %d\n",i,j); 63 } 64 } 65 } 66 return 0; 67 }