题目链接:点击这里
dfs求出从每个点出发所能到达的最远距离,然后遍历起点取最大值。
在搜索过程中,为了防止重复计算,开一个数组记录搜索结果。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 310;
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, -1, 1};
int r, c;
int a[N][N], f[N][N];
int dfs(int x, int y)
{
int &v = f[x][y]; // 使用引用,简化代码
if(v) return f[x][y];
v = 1;
for(int i = 0; i < 4; ++i)
{
int tx = x + dx[i], ty = y + dy[i];
if(tx >= 1 && tx <= r && ty >= 1 && ty <= c && a[tx][ty] < a[x][y])
{
v = max(v, dfs(tx, ty) + 1);
}
}
return v;
}
int main()
{
scanf("%d%d", &r, &c);
for(int i = 1; i <= r; ++i)
for(int j = 1; j <= c; ++j)
scanf("%d", &a[i][j]);
int ans = -1e9;
for(int i = 1; i <= r; ++i)
for(int j = 1; j <= c; ++j)
ans = max(ans, dfs(i, j));
printf("%d\n", ans);
return 0;
}