View Code of Problem 17

#include <stdio.h>
#include <string.h>

int n,m;

int map[100][100];
int max=0;
int maxcnt=0;
int climb(int a,int b,int cnt)
{
	if(map[a][b]>=map[a-1][b]&&map[a][b]>=map[a+1][b]&&map[a][b]>=map[a][b-1]&&map[a][b]>=map[a][b+1])
	{
		if(cnt>maxcnt)
		{
			maxcnt=cnt;
		}
		return 1;
	}
	else
	{
		if(a+1<=n&&map[a+1][b]>map[a][b])
		{
		
			climb(a+1,b,cnt+1);
		
		}
		if(a-1>=1&&map[a-1][b]>map[a][b])
		{
		
			climb(a-1,b,cnt+1);
		
		}
		if(b+1<=m&&map[a][b+1]>map[a][b])
		{
			
			climb(a,b+1,cnt+1);
		
		}
		if(b-1>=1&&map[a][b-1]>map[a][b])
		{
			
			climb(a,b-1,cnt+1);
			
		}
	}
}


int main()
{
	memset(map,0,sizeof(map));
	while(scanf("%d%d",&n,&m)!=EOF) 
	{
		int mini=0,minj=0,min=9999;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			scanf("%d",&map[i][j]);
			if(map[i][j]>max)
			{
				max=map[i][j];
			}
			if(map[i][j]<min)
			{
				min=map[i][j];
				mini=i;
				minj=j;
			}
		}
	}
	climb(mini,minj,0);
	printf("%d\n",maxcnt);
	}
	
	
	
	
 } 

Double click to view unformatted code.


Back to problem 17