华为题:矩阵中的最长递增路径

对于每个单元格,你可以往上、下、左、右四个方向移动。不能沿对角线移动,也不能移动到矩阵边界外。

输入描述

第一行输入两个整数 m 和 n,表示矩阵的行数和列数。

接下来输入 m 行,每行 n 个整数。

输出描述

输出最长递增路径的长度。

示例 1

输入

text

复制代码
3 3
9 9 4
6 6 8
2 1 1

输出

text

复制代码
4

说明

最长递增路径为 1 -> 2 -> 6 -> 9。

C++ 解法

cpp

复制代码
#include <bits/stdc++.h>
using namespace std;

int m, n;
vector<vector<int>> matrix, memo;
int dirs[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};

int dfs(int x, int y) {
    if (memo[x][y] != -1) return memo[x][y];

    int best = 1;

    for (auto& d : dirs) {
        int nx = x + d[0];
        int ny = y + d[1];

        if (nx >= 0 && nx < m && ny >= 0 && ny < n && matrix[nx][ny] > matrix[x][y]) {
            best = max(best, 1 + dfs(nx, ny));
        }
    }

    return memo[x][y] = best;
}

int main() {
    cin >> m >> n;

    matrix.assign(m, vector<int>(n));
    memo.assign(m, vector<int>(n, -1));

    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            cin >> matrix[i][j];
        }
    }

    int ans = 0;

    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            ans = max(ans, dfs(i, j));
        }
    }

    cout << ans << endl;
    return 0;
}
相关推荐
w_zero_one1 小时前
算法--构造
java·数据结构·算法
其实防守也摸鱼2 小时前
信创安全竞赛知识总结与题库
大数据·网络·人工智能·算法·安全·php
小超人诞生日记3 小时前
C++ 智能指针的使用及其原理详解
c++·算法
AiNightVision6 小时前
无人机夜视模块如何选择?——从参数指标到系统集成的完整选型指南
人工智能·算法·计算机视觉·车载系统·无人机·视频·智能硬件
牧羊人.3337 小时前
卷积神经网络之VGG
人工智能·深度学习·神经网络·算法·cnn
小郎君6588 小时前
Vue 多标签页的加载态设计:为什么我没有用 Suspense 实现 PageLoading
vue.js·算法
JJJennie7778 小时前
MAI Gateway私有化部署全攻略:大模型网关如何接入?附架构图
算法·gateway·ai网关·魔芋ai
東隅已逝,桑榆非晚8 小时前
算法3.双指针法-快乐数
c++·笔记·学习·算法
专注仿真8 小时前
卷积神经网络(CNN)算法详解
人工智能·python·算法·代码·大模型训练