poj 1088
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <cstring>
#include <stack>
#include <stdlib.h>
using namespace std;
int max (int x,int y,int z,int w)
{
if(x<y)
{x=y;}
if (x<z)
{x=z;}
if(x<w)
{x=w;}
return x;
}
int area[105][105]={0}; //记录每个点的高度
int len[105][105]={0}; //记录每个点的最大长度
int dfs (int i,int j,int height )
{
if(area[i][j]==-1||height <area[i][j] )//
{
return 0;
}
if(len[i][j]>=0)return len[i][j];
len[i][j]=max(dfs(i-1,j,area[i][j]),dfs(i,j-1,area[i][j]),dfs(i+1,j,area[i][j]),dfs(i,j+1,area[i][j]))+1;
return len[i][j];
}
int main ()
{
memset(area,-1,sizeof(area));
memset(len,-1,sizeof(len));
ifstream in("11");
int n,v;
int l;
while(cin>>n>>v){
for (int i=1;i<=n;i++)
{
for(int j=1;j<=v;j++)
{
cin>>area[i][j];
}
}
int maxlen=0;
for (int i=1;i<=n;i++)
{
for(int j=1;j<=v;j++)
{
l=dfs (i,j,area[i][j]);
if (l>maxlen)
maxlen=l;
}
}
cout<<maxlen;}
return 0;
}
#include <fstream>
#include <stdio.h>
#include <cstring>
#include <stack>
#include <stdlib.h>
using namespace std;
int max (int x,int y,int z,int w)
{
if(x<y)
{x=y;}
if (x<z)
{x=z;}
if(x<w)
{x=w;}
return x;
}
int area[105][105]={0}; //记录每个点的高度
int len[105][105]={0}; //记录每个点的最大长度
int dfs (int i,int j,int height )
{
if(area[i][j]==-1||height <area[i][j] )//
{
return 0;
}
if(len[i][j]>=0)return len[i][j];
len[i][j]=max(dfs(i-1,j,area[i][j]),dfs(i,j-1,area[i][j]),dfs(i+1,j,area[i][j]),dfs(i,j+1,area[i][j]))+1;
return len[i][j];
}
int main ()
{
memset(area,-1,sizeof(area));
memset(len,-1,sizeof(len));
ifstream in("11");
int n,v;
int l;
while(cin>>n>>v){
for (int i=1;i<=n;i++)
{
for(int j=1;j<=v;j++)
{
cin>>area[i][j];
}
}
int maxlen=0;
for (int i=1;i<=n;i++)
{
for(int j=1;j<=v;j++)
{
l=dfs (i,j,area[i][j]);
if (l>maxlen)
maxlen=l;
}
}
cout<<maxlen;}
return 0;
}