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;
}


























posted @ 2012-11-03 18:44  MFT  阅读(166)  评论(0编辑  收藏  举报