首页 > 代码库 > poj 1088 滑雪
poj 1088 滑雪
记忆化搜索。。
对每个点能走的最远进行记录,如果走过,直接返回上一层。。
最后遍历找出最大值。。
<span style="font-size:18px;">#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; struct node{ int q,w; }s[104][105]; int a,b; int yy[105][105]; int map[4][2]={1,0,-1,0,0,1,0,-1}; int dfs(int c,int d) { if(s[c][d].w!=1) { return s[c][d].w; } int n,m,max=0; for(int i=0;i<4;i++) { int e=c+map[i][0]; int f=d+map[i][1]; if(e>0&&e<=a&&f<=b&&f>0&&s[c][d].q>s[e][f].q) { if(max<dfs(e,f)) s[e][f].w=max=dfs(e,f);//这记录着每个点走的距离,但是没有对最终返回的值进行记录,少这个会超时 } } return max+1; } int main() { scanf("%d %d",&a,&b); for(int i=1;i<=a;i++) { for(int j=1;j<=b;j++) { scanf("%d",&s[i][j].q); s[i][j].w=1; } } int maxn; for(int i=1;i<=a;i++) { for(int j=1;j<=b;j++) { // memset(yy,0,sizeof(yy)); if(s[i][j].w==1) { maxn=dfs(i,j); s[i][j].w=maxn;//记录最终返回的值 } } } for(int i=1;i<=a;i++) { for(int j=1;j<=b;j++) { // printf("%d\n",s[i][j].w); if(s[i][j].w>maxn) maxn=s[i][j].w; } } printf("%d\n",maxn); return 0; } </span>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。