【力扣】所有可能的路径

LeetCode 所有可能的路径(回溯法) 给一个有 n 个结点的有向无环图,找到所有从 0 到 n-1 的路径并输出(不要求按顺序) 二维数组的第 i 个数组中的单元都表示有向图中 i 号结点所能到达的下一些结点(译者注:有向图是有方向的,即规定了a→b你就不能从b→a)空就是没有下一个结点了。 示例: 输入: [[1,2], [3], [3], []] 输出: [[0,1,3],[0,2,3]] 解释: 图是这样的: 0---&gt... 阅读详情

🔥博客主页: 我要成为C++领域大神
🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】
❤️感谢大家点赞👍收藏⭐评论✍️

本博客致力于知识分享,与更多的人进行学习交流

​

给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序)

graph[i] 是一个从节点 i 可以访问的所有节点的列表(即从节点 i 到节点 graph[i][j]存在一条有向边)。

示例 1:

​

输入:graph = [[1,2],[3],[3],[]]
输出:[[0,1,3],[0,2,3]]
解释:有两条路径 0 -> 1 -> 3 和 0 -> 2 -> 3

示例 2:

​

输入:graph = [[4,3,1],[3,2,4],[3],[4],[]]
输出:[[0,4],[0,3,4],[0,1,3,4],[0,1,2,3,4],[0,1,4]]

回溯法

思路

定义两个类成员变量,result存储所有从节点0到节点n-1的路径的二维数组,path存储当前正在构建的路径,是一个一维数组。

深搜三部曲:

参数:首先我们dfs函数一定要存一个图,用来遍历的,需要存一个目前我们遍历的节点,定义为x。

还需要存一个n,表示终点,我们遍历的时候,用来判断当 x==n 时候 标明找到了终点。

终止条件:当 x== n 时,即当前路径到达目标节点,将当前的 path 加入到 result 中,并返回。

单层:对于节点 x 的每一个邻居节点 i(通过 graph[x] 获得),将 i 加入 path 中,并递归调用 dfs(graph, i, n)。

回溯:在递归返回后(即递归完毕或遇到终止条件后),需要将最后添加的节点 i 从 path 中弹出,以便探索其他可能的路径。

代码实现

class Solution {
public:
    vector<vector<int>> result;//存储所有0~n-1的路径
    vector<int> path;//符合要求的一条路径
    vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& graph) {
        path.push_back(0);//每一个路径都是从0开始的,所以将0存入
        dfs(graph,0,graph.size()-1);
        return result;
    }
    void dfs(vector<vector<int>>& graph,int x,int n)//x是当前遍历到的节点,n是目标节点
    {
        if(x==n)//说明当前路径到了目标节点,将path存入result
        {
            result.push_back(path);
            return;
        }

        for(int i:graph[x]) //遍历二维数组每一层的元素
        {
            path.push_back(i);
            dfs(graph,i,n);//继续向下递归
            path.pop_back(); //回溯,存放下一层的路径。
        }
    }
};
Java实现 LeetCode 797 所有可能的路径 (DFS) 797. 所有可能的路径 给一个有 n 个结点的有向无环图,找到所有从 0 到 n-1 的路径并输出(不要求按顺序) 二维数组的第 i 个数组中的单元都表示有向图中 i 号结点所能到达的下一些结点(译者注:有向图是有方向的,即规定了a→b你就不能从b→a)空就是没有下一个结点了。 示例: 输入: [[1,2], [3], [3], []] 输出: [[0,1,3],[0,2,3]] 解释: 图是这... 阅读详情

相关推荐

CANoe基础讲解01:从零开始使用CANoe轻松搭建你的第一个CAN网络

本文是一篇CANoe软件入门实操指南,逐步演示了如何从零创建并运行一个CAN FD仿真工程。内容包括:启动软件、配置硬件通道与网络、加载DBC数据库、使用CAPL编写仿真节点发送CAN报文,最终启动测量并在Trace窗口中查看通信结果。通过七个清晰步骤,帮助初学者快速掌握CANoe基本操作,完成首个可运行的仿真网络搭建

车载网络小D的博客 1571

【图论刷题-6】力扣 797. 所有可能的路径

力扣刷题、有向无环图

Smileyan's blog 1万+

结构光三维重建(一)条纹结构光三维重建

在近景三维重建领域,结构光技术可以说是应用最广泛的,尤其在工业领域。该技术目前具有高精度和无视弱纹理等优点,但复杂的室外环境还是会对该技术造成一定程度的干扰。目前用的比较多的结构光分别两大类:线结构光以及条纹结构光。接下来我先来简单介绍一下条纹结构光三维重建,事实上,条纹结构光的原理与双目立体匹配是非常相似的。...

AAAA202012的博客 1万+

51nod 1069【思维】

具体思路来自相关讨论 给个不太严谨的证明思路: 第一步:证明路径可逆,也就是如果(a, b) -> (x, y)可行,则(x, y) - > (a, b)可行 这个比较直观,只需要分别由(a +b, b) (a, a + b), (a - b, b), (a, a - b)推回(a, b)即可: 例如:(a, a - b) - > (b, a - b...

weixin_30628801的博客 185

Unity3D实现项目限制功能(使用次数限制和时间限制)

大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。在软件开发的时候,可能会遇到程序的使用次数限制,以及时间的限制,下面就写一下这两种方法是新建注册表,增加键值对,修改键值,完成对程序的控制提示:以下是本篇文章正文内容,下面案例可供参考以上就是讲了两种限制方法不定时更新Unity开发技巧,觉得有用记得一键三连哦。

心疼你的一切博客 1810

Happycapy深度解析:AI智能体的“iPhone时刻“来了?

从理论到实践深度解析了融合OpenClaw和ClaudeCode优点的超强智能体工具Happycapy

program哲学 456

力扣 797. 所有可能的路径(中等)

题目 给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序) 二维数组的第 i 个数组中的单元都表示有向图中 i 号节点所能到达的下一些节点,空就是没有下一个结点了。 译者注:有向图是有方向的,即规定了 a→b 你就不能从 b→a 。 示例 1: 输入:graph = [[1,2],[3],[3],[]] 输出:[[0,1,3],[0,2,3]] 解释:有两条路径 0 -> 1 -> 3 和 0 -> 2 -> 3

毛毛的博客 261

【人工智能】OpenClaw网关API速率限制报错全解析 API rate limit reached. Please try again later.

对应HTTP标准状态码为429(请求过多)。该报错集中出现在OpenClaw GATEWAY DASHBOARD的聊天会话界面,核心特征为:用户最初以为是单一模型服务商的问题,先后更换OpenAI、Gemini、Ollama、Moonshot、Mercury-2等多个主流大模型API后,该报错仍稳定触发,尤其在执行复杂任务时高频出现。

奶爸的编程之路,也就一周冷个三天 6458

797. 所有可能的路径

797. 所有可能的路径

m0_62256641的博客 343

MIKE水动力笔记17_MIKE文件转shp、统计每个单元格的面积

MIKE的工具箱中自带一个转shp的工具,然后可以拖进ArcGIS中很方便的统计每个单元格的面积和每个网格点的水深。

晏长街的博客 4150

OpenCV实战之人脸美颜美型(八)——大眼(上)

从大众审美的角度来看,眼睛适当的“变大”会让人显得更加年轻。因此美型中就有一项大眼功能,其效果就是让眼睛适当变大,这章内容就围绕着大眼算法展开。

On my way 1211

力扣 797. 所有可能路径【DFS】

【代码】力扣 797. 所有可能路径【DFS】

小郑在路上 620

系统架构设计(以飞控系统、航电系统、机电管理系统、电子电气架构为例)

系统架构涉及对系统的结构和行为进行高层次的描述。它包括系统的组成部分、这些部分之间的关系、与外部环境的交互方式,以及满足特定功能和非功能性需求的方法。系统架构定义了系统的总体设计蓝图,指导系统的开发、集成、部署和维护。系统架构设计的目的是通过合理的结构和设计原则,确保系统能够高效、稳定、安全地运行,满足当前和未来的需求,同时具备良好的维护性、扩展性和可持续性。良好的系统架构不仅能够提高系统的开发效率和运行性能,还能降低长期的维护和运营成本,支持系统的持续演进和技术更新。

qq_41854911的博客 3051

797.力扣LeetCode_所有可能的路径

该文介绍了两种基于深度优先搜索(DFS)的路径查找算法:1)通用版本使用DFS+回溯,通过visited数组避免节点重复访问,适用于含环/无环图;2)优化版本针对有向无环图(DAG)特性,省略visited数组。两种方法都采用1<<13(8192)的内存分配策略,专门处理15节点全连接DAG的最大路径数情况。核心流程包括:初始化参数、递归遍历邻接节点、到达终点保存路径、回溯处理。注释版详细说明了全局变量、递归函数和主函数的实现逻辑,特别强调了15节点场景下的内存分配计算依据。

2401_82472941的博客 953

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Leetcode 797. 所有可能的路径 C++

Leetcode 797. 所有可能的路径 题目 给一个有 n 个结点的有向无环图,找到所有从 0 到 n-1 的路径并输出(不要求按顺序) 二维数组的第 i 个数组中的单元都表示有向图中 i 号结点所能到达的下一些结点(译者注:有向图是有方向的,即规定了a→b你就不能从b→a)空就是没有下一个结点了。 示例: 输入: [[1,2], [3], [3], []] 输出: [[0,1,3],[0,2,3]] 解释: 图是这样的: 0--->1 | | v v 2--->3 这有两条

weixin_43750513的博客 1394

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Leetcode 797.所有可能的路径

i++) { // 遍历节点n链接的所有节点。// 遍历到的节点加入到路径中来。// 要求从节点 0 到节点 n-1 的路径并输出,所以是 graph.size() - 1。if (x == graph.size() - 1) { // 找到符合条件的一条路径。// 无论什么路径已经是从0节点出发。// 收集符合条件的路径。// 0节点到终点的路径。有两条路径 0 -> 1 -> 3 和 0 -> 2 -> 3。// x:目前遍历的节点。

Kimsanmyeong的博客 949

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

力扣算法之《797. 所有可能的路径》

[力扣算法]《797. 所有可能的路径》 class Solution { // follow the solution from the official website of leetcode List<List<Integer>> ans = new ArrayList<List<Integer>>(); Deque<Integer> stack = new ArrayDeque<Integer>();

weixin_51735114的博客 530

【Leetcode】797. 所有可能的路径

797. 所有可能的路径题目描述解题思路 题目描述 给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序) 二维数组的第 i 个数组中的单元都表示有向图中 i 号节点所能到达的下一些节点,空就是没有下一个结点了。 译者注:有向图是有方向的,即规定了 a→b 你就不能从 b→a 。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/all-paths-from-source-to-targe

小哲的博客 894

力扣797. 所有可能的路径

第九十一天 --- 力扣797. 所有可能的路径题目一思路BFSDFS:经典回溯思路代码BFSDFS 题目一 力扣:797. 所有可能的路径 思路 一道经典的图论从源点到汇点求路径问题 1、读懂题目,他给的数据形式很简单,非常实用,总结一句话就是,gragh[0]存的就是第0个点直接和哪些点相连,很适合求路径使用。 BFS 1、提到BFS,我们第一反应就是用队列维护。 2、但是平常的都是用队列维护一个个的点,这个题要求出所有的路径,问题变化了,我要求所有的源点到汇点的路径,我们发现单纯的用维护点的方

qq_45678698的博客 357

LeetCode 797. 所有可能的路径

LeetCode 797. 所有可能的路径题目题解代码 题目 题解 此题用dfs比较有优势,可以找出所有路径 dfs+回溯 代码 class Solution { public: void dfs(vector<vector<int>>& graph,int i,vector<int>& ans,vector<vector<int>>& res){ int n=graph.size();

Saulty的博客 354

[LeetCode解题报告] 797. 所有可能的路径

DAG搜索路径

liuliangcan的博客 204

【Leetcode刷题篇】- Leetcode797 所有可能的路径

DFS-2.Leetcode797 所有可能的路径 给一个有 n 个结点的有向无环图,找到所有从 0 到 n-1 的路径并输出(不要求按顺序) 二维数组的第 i 个数组中的单元都表示有向图中 i 号结点所能到达的下一些结点(译者注:有向图是有方向的,即规定了 a→b 你就不能从 b→a )空就是没有下一个结点了。 示例 1: 输入:graph = [[1,2],[3],[3],[]] 输出:[[0,1,3],[0,2,3]] 解释:有两条路径 0 -> 1 -> 3 和 0 -> 2 -

Mind_programmonkey的博客 910

leetcode797题所有可能的路径之和

leetcode797题所有可能的路径之和 这应该算是比较基础的一个题目了,图的存储形式一般都是一个二维数组,感觉图和多叉树有一点相似的地方,多叉树的遍历和回溯算法有一点类似,有时间的话,可以总结一下, class Solution { LinkedList<List<Integer>> lists = new LinkedList<>(); //这个数组其实是基于邻接表的一个 简单来说,就是对图的定义 public List<List&l

LIMao_link 134

力扣——所有可能的路径

给一个有n个结点的有向无环图,找到所有从0到n-1的路径并输出(不要求按顺序) 二维数组的第 i 个数组中的单元都表示有向图中 i 号结点所能到达的下一些结点(译者注:有向图是有方向的,即规定了a→b你就不能从b→a)空就是没有下一个结点了。 示例: 输入: [[1,2], [3], [3], []] 输出: [[0,1,3],[0,2,3]] 解释: 图是这样的: 0...

weixin_30622107的博客 239

LeetCode 797 所有可能的路径[DFS 回溯] HERODING的LeetCode之路

解题思路: n的范围不超过15,这给深度优先与回溯创造了很好的条件,直接往每个下一个节点深搜,一直找到最后一个节点为止,如果到头了还没到终点,它会直接退出(没有节点能够深搜了),全部过程都是回溯的标准模板,代码如下: class Solution { private: vector<vector<int>> ans; vector<int> res; int n; public: vector<vector<int>&g.

HERODING23的博客 263

力扣-797题 所有可能的路径(C++)- 回溯

【代码】力扣-797题 所有可能的路径(C++)- 回溯。

qq_40467670的博客 477
上一篇: 【操作系统】pipe&mkfifo|管道详解
下一篇: 【力扣】岛屿数量
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值