ickchen2

1088简单的记忆搜索

只用了二维的数组来记忆
#include<stdio.h>
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<queue>
#include<algorithm>
#define M 1000
using namespace std;
int a[M][M];//m*n
int f[M][M];
int s[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
int m,n;
bool ok(int x,int y)
{
     return (x>=0&&x<n&&y>=0&&y<m);
}
int dfs(int x,int y)
{
 if(f[x][y]>=0)return f[x][y];
 int ma=0;
    for(int i=0;i<4;i++)
 {
        int xx=x+s[i][0];
        int yy=y+s[i][1];
        if(ok(xx,yy)&&a[xx][yy]<a[x][y])
        {
            if(ma<dfs(xx,yy))
            {
                ma=dfs(xx,yy);
            }
        }
    }
    f[x][y]=ma+1;
    return f[x][y];
}
int main()
{
    scanf("%d%d",&n,&m);
    memset(f,-1,sizeof(f));
    int mi=-1;
    int x,y;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    mi=-1;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(mi==-1||mi<dfs(i,j))
            {
                mi=dfs(i,j);
            }
        }
    }
    printf("%d\n",mi);
}

posted on 2008-08-28 10:35 神之子 阅读(84) 评论(0)  编辑 收藏 引用 所属分类: ACM题解


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜