#include <iostream>
# include <cstring>
using namespace std;
int high[110][110];
int s[110][110];
int visited[110][110];
int dx[4] = {0, 1, -1, 0};
int dy[4] = {1, 0, 0, -1};
int tryskiing(int x, int y)
{
if (visited[x][y])
{
return s[x][y] + 1;
}
visited[x][y] = 1;
int n = 0;
for (int i = 0; i < 4; i++)
{
if (high[x + dx[i]][y + dy[i]] < high[x][y] && high[x + dx[i]][y + dy[i]] != -1)
{
n = max(n, tryskiing(x + dx[i], y + dy[i]));
}
}
s[x][y] += n;
return s[x][y] + 1;
}
int main()
{
int r, c;
cin >> r >> c;
memset(high, -1, sizeof(high));
memset(visited, 0, sizeof(visited));
memset(s, 0, sizeof(s));
for (int i = 1; i <= r; i++)
{
for (int j = 1; j <= c; j++)
{
cin >> high[i][j];
}
}
/*for (int i = 0; i <= r + 3; i++)
{
high[i][0] = 10001;
high[0][i] = 10001;
}
for (int i = 0; i <= r + 3; i++)
{
high[i][0] = 10001;
high[0][i] = 10001;
}*/
int mymax = 0;
for (int i = 1; i <= r; i++)
{
for (int j = 1; j <= c; j++)
{
mymax = max(mymax, tryskiing(i, j));
}
}
/*for (int i = 1; i <= r; i++)
{
for (int j = 1; j <= c; j++)
{
//if (mymax < s[i][j])
// mymax = s[i][j];
cout << s[i][j] << ' ';
}
cout << endl;
}*/
cout << mymax;
//cin >> mymax;
return 0;
}
滑雪问题----dfs
最新推荐文章于 2021-11-20 21:31:33 发布