比赛 20120712 评测结果 RRRRRRRRRR
题目名称 登山 最终得分 0
用户昵称 Sky_miner 运行时间 0.002 s
代码语言 C++ 内存使用 0.32 MiB
提交时间 2016-02-17 08:48:19
显示代码纯文本
#include <cstdio>
#include <cstring>
int mo[65][65];
int done[65][65];
int ans=0,n,m;
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
void DFS(int x,int y,int cnt,int up_down){
    if(cnt>ans) ans=cnt; done[x][y]=1;
    if(up_down==0){
        for(int i=0;i<4;i++){
            int nx=x+dx[i];int ny=y+dy[i];
            if(!done[nx][ny]&&nx>=0&&nx<n&&ny>=0&&ny<m)	//边界处理 
                if(mo[nx][ny]>mo[x][y]) DFS(nx,ny,cnt+1,0);
                else if(mo[nx][ny]<mo[x][y]) DFS(nx,ny,cnt+1,1);
        }
    }
    else{
        for(int i=0;i<4;i++){
            int nx=x+dx[i];int ny=y+dy[i];
            if(!done[nx][ny]&&nx>=0&&nx<n&&ny>=0&&ny<m&&mo[nx][ny]<mo[x][y])//边界处理  
                DFS(nx,ny,cnt+1,1);
        }
    }
    done[x][y]=0;
}

int main(){
    //freopen("hike.in","r",stdin);
//    freopen("hike.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++)
    	for(int j=0;j<m;j++)
          scanf("%d",&mo[i][j]);
    for(int i=0;i<n;i++)
      	for(int j=0;j<m;j++){
          	memset(done,0,sizeof(done)); DFS(i,j,1,0);
          	memset(done,0,sizeof(done)); DFS(i,j,1,1);
      	}
    printf("%d\n",ans);
    return 0;
}