哈哈哈
2024-05-22 22:25:31
发布于:广东
17阅读
0回复
0点赞
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
// 定义二维数组的行和列的最大值
const int MAX_R = 100;
const int MAX_C = 100;
// 定义上、下、左、右四个方向的坐标变化
const int dx[4] { -1, 1, 0, 0 };
const int dy[4] { 0, 0, -1, 1 };
int R, C; // 行数和列数
int arr[MAX_R][MAX_C]; // 存储二维数组的值
int dp[MAX_R][MAX_C]; // 存储以每个位置为起点的最长下降路径长度
int dfs(int x, int y) {
if (dp[x][y] > 0) {
return dp[x][y];
}
int max_length = 1;
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx >= 0 && nx < R && ny >= 0 && ny < C && arr[nx][ny] < arr[x][y]) {
int length = 1 + dfs(nx, ny);
max_length = max(max_length, length);
}
}
dp[x][y] = max_length;
return max_length;
}
int findLongestPath() {
int max_length = 0;
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
int length = dfs(i, j);
max_length = max(max_length, length);
}
}
return max_length;
}
int main() {
cin >> R >> C;
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
cin >> arr[i][j];
}
}
int result = findLongestPath();
cout << result << endl;
return 0;
}
这里空空如也
有帮助,赞一个