您的位置:首页 > 其它

POJ 1088 滑雪

2011-03-26 22:33 337 查看
传说中很经典的一题。

关键就是记录下已经搜索过的点。可以节省很多的时间。

学习了。

好久没做题了。。。

#include <iostream>
using namespace std;
int map[105][105];
int step[105][105];
int dir[4][2] = {-1,0,1,0,0,-1,0,1};
int r,c;
int DFS(int x,int y)
{
int max=0,ans,i;
if(step[x][y]>0)
return step[x][y];
for(i=0;i<=3;i++)
{
if( map[x][y] > map[x+dir[i][0]][y+dir[i][1]] )
{
ans = DFS(x+dir[i][0],y+dir[i][1]) + 1 ;
if( ans >max )
max = ans;
}
}
return max;
}
int main()
{
int i,j,max,ans;
while(scanf("%d%d",&r,&c)!=EOF)
{
memset(step,0,sizeof(step));
memset(map,10,sizeof(map));
for(i=1;i<=r;i++)
{
for(j=1;j<=c;j++)
{
scanf("%d",&map[i][j]);
}
}
ans = 0;
for(i=1;i<=r;++i)
{
for(j=1;j<=c;++j)
{
max = step[i][j] = DFS(i,j);
if( max > ans )
ans = max;
}
}
printf("%d/n",ans+1);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: