您的位置:首页 > 其它

POJ 1088 滑雪

2014-03-16 00:38 260 查看
回溯思想。。要记忆化搜索。

#include<stdio.h>
#include<string.h>
int a[105][105],dp[105][105];
int dfs(int x,int y)
{
if(dp[x][y]>1) return dp[x][y];//如果之前计算过了,直接返回这个计算过的值
int Q,W,E,R,MAX=1;
if(a[x][y]>a[x-1][y])
{Q=dfs(x-1,y)+1;if(MAX<Q)MAX=Q;}
if(a[x][y]>a[x+1][y])
{W=dfs(x+1,y)+1;if(MAX<W)MAX=W;}
if(a[x][y]>a[x][y-1])
{E=dfs(x,y-1)+1;if(MAX<E)MAX=E;}
if(a[x][y]>a[x][y+1])
{R=dfs(x,y+1)+1;if(MAX<R)MAX=R;}
return MAX;
}
int main()
{
int r,c;
while(~scanf("%d%d",&r,&c))
{
memset(a,1,sizeof(a));//把边界设为无穷大
int i,j,p=0;
for(i=1;i<=r;i++)
for(j=1;j<=c;j++)
{
dp[i][j]=1;
scanf("%d",&a[i][j]);
}
for(i=1;i<=r;i++)
for(j=1;j<=c;j++)
{
dp[i][j]=dfs(i,j);
if(dp[i][j]>p)
p=dp[i][j];
}
printf("%d\n",p);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: