1、简单描述
输入c*r的矩阵,元素表示山头的高度,求最长滑雪的区域长度。
2、思路
#include <bits/stdc++.h>
using namespace std;
int dx[]={-1,0,1,0};
int dy[]={0,1,0,-1};
int r,c;
int opt[101][101];
int node[101][101];
bool ok(int i,int j)
{
return (i>=1&&i<=r&&j>=1&&j<=c);
} //判断是否越界
int dp(int i,int j)
{
int k;
if(opt[i][j]>0) return opt[i][j];
for(k=0;k<4;k++)
{
if(ok(i+dx[k],j+dy[k]))
if(node[i+dx[k]][j+dy[k]]<node[i][j])
{
if(opt[i][j]<dp(i+dx[k],j+dy[k])+1)
opt[i][j]=dp(i+dx[k],j+dy[k])+1;
}
}
return opt[i][j]; //计算区域长度
}
int main()
{
while(cin>>r>>c)
{
int Max=-1;
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
{
cin>>node[i][j];
}
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
{
int t = dp(i,j);
if(Max<t)
Max=t;
} //输出最长区域长度
cout<<Max+1<<endl;
}
return 0;
}
多次输入测试数据。
上下左右四个方向查找。