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