1引子:
DFS和递归法的一道经典例题矩阵最长递增子序列这个题写完之后脑袋产生了许多突发奇想:
1 第一个堆栈代码段这些底层C语言内部管理的工具它是怎么进行内存分配的?能不能深究?
2 第二个这个DFS和计划数组存储的思路到底抽象了哪种思维?能不能发散到其他算法数据结构的面试题中?或者说能不能在其他的编程中应用到这种思维抽象出一个公有的编程范式思维范式应用到其他的任何领域包括生活中?
3 是就有了这篇博文希望大家一起和我探讨一下
2 题描述
给定一个 n 行 m 列的矩阵,矩阵内所有数均为非负整数。需要找到一条最长路径,使得这条路径上的元素是严格递增的。路径可以向上、下、左、右四个方向移动,但不能重复访问同一个单元格。
示例:
输入:[[1,2,3],[4,5,6],[7,8,9]]
输出:5
解释:最长递增路径为 1->2->3->6->9
1暴力 DFS 解法
首先想到的是暴力 DFS,从每个单元格出发,尝试所有可能的路径:
#include <stdio.h>
#include <stdlib.h>
// 方向数组:上、下、左、右
const int dirs[4][2] = {
{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
// 深度优先搜索函数
int dfs(int** matrix, int rows, int cols, int r, int c, int prev) {
// 检查边界条件和递增条件
if (r < 0 || r >= rows || c < 0 || c >= cols || matrix[r][c] <= prev) {
return 0;

最低0.47元/天 解锁文章
706

被折叠的 条评论
为什么被折叠?



