View Code of Problem 17

#include<stdio.h>
#include<string.h>
#include<math.h>
#define MAX 1000000+10
#define Max(a,b) a>b?a:b
#define Min(a,b) a<b?a:b
int climb(int a[100][100],int i,int j)
{
	int q,b,c,d;
	q=b=c=d=0;
	if(a[i][j]>a[i+1][j]&&a[i][j]>a[i-1][j]&&a[i][j]>a[i][j+1]&&a[i][j]>a[i][j-1])
	{
		return 0;
	}else{
		if(a[i][j]<a[i+1][j]) q=climb(a,i+1,j)+1;
		if(a[i][j]<a[i-1][j]) b=climb(a,i-1,j)+1;
		if(a[i][j]<a[i][j+1]) c=climb(a,i,j+1)+1;
		if(a[i][j]<a[i][j-1]) d=climb(a,i,j-1)+1;
	}
	return (q>b?q:b)>(c>d?c:d)?(q>b?q:b):(c>d?c:d);
}
int main()
{
	int m,n;
		
	while(scanf("%d%d",&m,&n)!=EOF)
	{
		int i,j;
		int a[100][100]={0};
		for(i=1;i<=m;i++)
		{
			for(j=1;j<=n;j++)
			{
				scanf("%d",&a[i][j]);
			}
		}
		int sum=0,step=0;
		for(i=1;i<=m;i++)
		{
			for(j=1;j<=n;j++)
			{
				step=climb(a,i,j);
				if(step>sum)
				{
					sum=step;
				}
			}
		}
		printf("%d\n",sum);
	}
 } 

Double click to view unformatted code.


Back to problem 17