#include<stdlib.h> #include<stdio.h> int n,m; int a[1000][1000]={0}; int search(int x,int y){ int left=0,right=0,up=0,down=0; if(a[x][y]>a[x-1][y]&&a[x][y]>a[x+1][y]&&a[x][y]>a[x][y+1]&&a[x][y]>a[x][y-1]) return 0; else{ if(a[x][y]<a[x-1][y]) left=search(x-1,y)+1; // 先一直左边走,并且每次更新一次,即往前走一步 if(a[x][y]<a[x+1][y]) right=search(x+1,y)+1; // 左边无法走,就往右边走,然后再次判断左能否走,即进行上下左右判断 if(a[x][y]<a[x][y+1]) up=search(x,y+1)+1; if(a[x][y]<a[x][y-1]) down=search(x,y-1)+1; } int max1=left>right?left:right; int max2=up>down?up:down; // 取四个数中最大的值 return max1>max2?max1:max2; } int main(){ while((scanf("%d %d",&n,&m)!=EOF)){ for(int i=0; i<1000; i++){ for(int z=0; z<1000; z++) a[i][z]=0; } for(int i=1; i<=n; i++){ for(int z=1; z<=m; z++) scanf("%d",&a[i][z]); } int max=0; for(int i=1; i<=n; i++){ for(int z=1; z<=m; z++){ int result = search(i,z); if(result > max) max = result; } } printf("%d\n",max); } return 0; } |
Double click to view unformatted code.