您的位置:首页 > 其它

poj1088 滑雪 记忆化搜索

2015-04-12 16:21 176 查看
我是渣渣 我是渣渣  。。。。记忆化搜索   看了学长的代码 和算法竞赛入门经典这本书才勉勉强强看懂点。。。
#include <stdio.h>
#include <string.h>
int dir[4][2]={1,0,-1,0,0,1,0,-1};//方向
int dp[101][101],map[101][101];//dp[x][y]保存记忆。。。
int m,n;
int max(int x,int y)
{
	return x>y?x:y;
}
bool limit(int x,int y)//是否出界
{
	if(x<0||y<0||x==m||y==n)
	return false;
	return true;
}
int dfs(int x,int y)
{
	if(dp[x][y]!=0) return dp[x][y];
	for(int i=0;i<4;i++)
	{
		int x_i=x+dir[i][0];
		int y_i=y+dir[i][1];
		if(limit(x_i,y_i)&&map[x][y]>map[x_i][y_i]&&dp[x][y]<dfs(x_i,y_i)+1)
		dp[x][y]=dp[x_i][y_i]+1;
	}
	return dp[x][y];
}
int main()
{

	while(scanf("%d %d",&m,&n)!=EOF){
	memset(map,0,sizeof(map));
	memset(dp,0,sizeof(dp));
	for(int i=0;i<m;i++)
	for(int j=0;j<n;j++)
	scanf("%d",&map[i][j]);
	int num=0;
	for(int i=0;i<m;i++)
	for(int j=0;j<n;j++)
	{
		num=max(num,dfs(i,j));
	}
	printf("%d\n",num+1);
    }
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: