记录编号 230298 评测结果 AAAAAAAAAA
题目名称 [UVa 10285] 最长滑坡 最终得分 100
用户昵称 Gravatarliu_runda 是否通过 通过
代码语言 C++ 运行时间 0.175 s
提交时间 2016-02-21 11:53:41 内存使用 2.24 MiB
显示代码纯文本
#include<cstdio>
#define max(a,b) a>b?a:b
int read(){
	int x;char ch;
	while(ch=getchar(),ch>'9'||ch<'0');
	x=ch-48;
	while(ch=getchar(),ch>='0'&&ch<='9')x=x*10+ch-48;
	return x;
}
int h[505][505];
int d[505][505];
int dire[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
void dfs(int x,int y){
	if(d[x][y])return;
	d[x][y]=1;
	int _x,_y;
	for(int i=0;i<4;++i){
		_x=x+dire[i][0];
		_y=y+dire[i][1];
		if(h[x][y]>h[_x][_y]){
			dfs(_x,_y);
			d[x][y]=max(d[x][y],d[_x][_y]+1);
		}
	}
}
int main(){
	freopen("shunzhi.in","r",stdin);
	freopen("shunzhi.out","w",stdout);
	int r,c;
	r=read();c=read();
	for(int i=1;i<=r;++i){
		for(int j=1;j<=c;++j){
			h[i][j]=read();
		}
	}
	for(int i=1;i<=r;++i)h[i][0]=h[i][c+1]=50000;
	for(int i=1;i<=c;++i)h[0][i]=h[r+1][i]=50000;
	for(int i=1;i<=r;++i){
		for(int j=1;j<=c;++j){
			if(!d[i][j])dfs(i,j);
		}
	}
	int maxd=0;
	for(int i=1;i<=r;++i)
		for(int j=1;j<=c;++j)
			maxd=max(maxd,d[i][j]);
	printf("%d",maxd);
	fclose(stdin);fclose(stdout);
	return 0;
}