题目:
即二维数组,从任一点开始,只能向值比它小的上下左右的方向遍历,求能最多的遍历次数?
#include<stdio.h>
int row=0,col=0;
int height[110][110]={0},len[110][110]={0};
int getlen(int i,int j,int path);
int ijhigher(int i,int j,int x,int y,int path)
{
if ( x>=0 && x<row && y>=0 && y<col && height[i][j]>height[x][y] )
{
if(len[x][y]==0)
path=1+getlen(x,y,path);
else
path=1+len[x][y];
}
len[i][j]=len[i][j]>path?len[i][j]:path;
return 0;
}
int getlen(int i,int j,int path)
{
if (len[i][j]!=0)
return len[i][j];
ijhigher(i,j,i-1,j,path);
ijhigher(i,j,i,j-1,path);
ijhigher(i,j,i+1,j,path);
ijhigher(i,j,i,j+1,path);
return len[i][j];
}
int main (void)
{
int i=0,j=0;
int maxlen=1;
scanf("%d %d",&row,&col);
for (i=0;i<row;i++)
for (j=0;j<col;j++)
scanf("%d",&height[i][j]);
for (i=0;i<row;i++)
for (j=0;j<col;j++)
{
len[i][j]=getlen(i,j,1);
maxlen= maxlen>len[i][j]? maxlen:len[i][j];
}
printf("%d ", maxlen);
return 0;
}