View Code of Problem 17

#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.


Back to problem 17