比赛 |
20120712 |
评测结果 |
AAAWWAAAAA |
题目名称 |
登山 |
最终得分 |
80 |
用户昵称 |
Citron酱 |
运行时间 |
0.066 s |
代码语言 |
C++ |
内存使用 |
0.31 MiB |
提交时间 |
2012-07-12 10:10:58 |
显示代码纯文本
#include <cstdio>
#define I_F "hike.in"
#define O_F "hike.out"
const short MAXn=60;
const short R[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
long map[MAXn][MAXn];
bool fl[MAXn][MAXn]={{false}};
bool flag=true;
short n, m;
int ans=0;
void Input();
void Dfs(const short&, const short&, const int&, const long&);
void Output();
int main()
{
Input();
for (short i=0; i<n; ++i)
for (short j=0; j<n; ++j)
Dfs(i,j,1,1);
Output();
return 0;
}
void Input()
{
freopen(I_F,"r",stdin);
scanf("%hd%hd",&n,&m);
for (short i=0; i<n; ++i)
for (short j=0; j<n; ++j)
scanf("%ld",&map[i][j]);
}
void Dfs(const short &x, const short &y, const int &l, const long &f)
{
fl[x][y]=true;
if (l>ans)
ans=l;
int a, b;
short c;
for (short i=0; i<4; ++i)
{
a=x+R[i][0], b=y+R[i][1];
c=(map[a][b]-map[x][y]>0)?1:-1;
if (a>=0 && a<n && b>=0 && b<n && (!fl[a][b]) && ((flag && l>1) || c*f>=0) && map[x][y]!=map[a][b])
{
if (c*f<0)
flag=false;
Dfs(a,b,l+1,c);
if (c*f<0)
flag=true;
}
}
fl[x][y]=false;
}
void Output()
{
freopen(O_F,"w",stdout);
printf("%d\n",ans);
}