《剑指 Offer》专项突破版 - 面试题 110 : 所有路径(C++ 实现)

news2024/11/28 2:33:22

题目链接:所有路径

题目

一个有向无环图由 n 个节点(标号从 0 到 n - 1,n >= 2)组成,请找出从节点 0 到节点 n - 1 的所有路径。图用一个数组 graph 表示,数组的 graph[i] 包含所有从节点 i 能直接到达的节点。例如,输入数组 graph 为 [[1, 2], [3], [3], []],则输出两条从节点 0 到节点 3 的路径,分别为 0->1->3 和 0->2->3,如下图所示。

分析

由于题目要求列出所有从节点 0 到节点 n - 1 的所有路径,因此采用深度优先搜索

深度优先搜索通常用递归实现。从节点 0 出发开始搜索。每当搜索到节点 i 时,先将该节点添加到路径中去。如果该节点正好是节点 n - 1,那么就找到了一条从节点 0 到节点 n - 1 的路径。如果不是,则从 graph[i] 找到每个相邻的节点并用同样的方法进行搜索。当从节点 i 出发能够抵达的所有节点都搜索完毕之后,将回到前一个节点搜索其他与之相邻的节点。在回到前一个节点之前,需要将节点 i 从路径中删除

代码实现

class Solution {
public:
    vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& graph) {
        vector<vector<int>> result;
        vector<int> path;
        dfs(graph, 0, result, path);
        return result;
    }
private:
    void dfs(vector<vector<int>>& graph, int i, vector<vector<int>>& result, vector<int>& path) {
        path.push_back(i);
        if (i == graph.size() - 1)
        {
            result.push_back(path);
        }
        else
        {
            for (int j : graph[i])
            {
                dfs(graph, j, result, path);
            }
        }
        path.pop_back();
    }
};

上述代码中的 path 记录当前路径中的所有节点,result 记录所有已经找到的路径。

上述代码中没有判断一个节点是否已经访问过。在做图搜索的时候通常需要判断一个节点是否已经访问过,这样可以避免反复访问环中的节点。由于这个题目已经明确图是一个有向无环图,因此没有必要担心重复访问环中的节点

上述代码和实现回溯法的代码很相像,这是因为回溯法从本质上来说就是深度优先搜索

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1599454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

javaWeb项目-游泳馆管理系统功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、SSM框架 开发信息…

机器学习实验------决策树

第1关&#xff1a;什么是决策树 任务描述 本关任务&#xff1a;根据本节课所学知识完成本关所设置的选择题。 第2关&#xff1a;信息熵与信息增益 任务描述 本关任务&#xff1a;掌握什么是信息增益&#xff0c;完成计算信息增益的程序设计。 import numpy as npdef calcIn…

3d视图模型乱了怎么调?---模大狮模型网

在进行3D建模时&#xff0c;有时候您可能会遇到视图模型混乱的情况。这可能是由于模型结构问题、导入导出错误或编辑操作不当等原因造成的。混乱的模型不仅影响工作效率&#xff0c;还可能导致渲染结果不理想。本文将介绍六种有效的方法来调整混乱的3D视图模型&#xff0c;帮助…

编程新手必看,Python3中函数知识点及语法学习总结(18)

介绍&#xff1a; Python3中的函数是组织好的、可重复使用的代码段&#xff0c;用于实现单一或相关联的功能。 以下是Python3中函数的一些基本介绍&#xff1a; 函数定义&#xff1a;在Python中&#xff0c;可以通过def关键字来定义一个函数。函数定义后&#xff0c;可以多次调…

从建表语句带你学习doris_表索引

1、doris建表概述 1.1、doris建表模板 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [DATABASE.]table_name (column_definition1[,column_deinition2,......][,index_definition1,[,index_definition2,]] ) [ENGINE [olap|mysql|broker|hive]] [key_desc] [COMMENT "tabl…

【Shell语言学堂】sed命令最全详解

三剑客之sed linux sed命令详解1.简介2.定址3.sed选项4.正则表达式元字符5.具体应用1、行打印2、替换指定文本3、插入文本行&#xff0c;追加文本行4、sed命令的删除功能5、其他命令6、sed 的分组替换功能7、sed -r或者sed -E linux sed命令详解 CSDN划过手的泪滴t 1.简介 se…

L2-1 堆宝塔分数

本题链接&#xff1a;PTA | 程序设计类实验辅助教学平台 题目&#xff1a; 样例&#xff1a; 输入 11 10 8 9 5 12 11 4 3 1 9 15 输出 4 5 思路&#xff1a; 这是一道模拟题&#xff0c;需要有耐心读题&#xff0c;跟着题目走一遍&#xff0c;就可以了。 代码详解如下&…

润乾报表平台 InputServlet 任意文件读取漏洞复现

0x01 产品简介 润乾报表是一个纯JAVA的企业级报表工具&#xff0c;支持对J2EE系统的嵌入式部署&#xff0c;无缝集成。服务器端支持各种常见的操作系统&#xff0c;支持各种常见的关系数据库和各类J2 EE的应用服务器&#xff0c;客户端采用标准纯html方式展现&#xff0c;支持…

基于SSM的游戏攻略管理系统

游戏攻略管理系统的构建与实现 一、系统概述二、系统架构与技术选型三、系统功能模块四、系统特点五、总结与展望 随着网络游戏的普及和发展&#xff0c;游戏攻略成为玩家们提升游戏技能、了解游戏机制的重要途径。为了更好地满足玩家需求&#xff0c;提高游戏攻略的管理效率和…

Xinstall:实现注册后自动绑定,提升用户体验

在移动互联网时代&#xff0c;App的注册与绑定流程对于用户体验至关重要。繁琐的注册步骤和手动绑定操作往往会让用户望而却步&#xff0c;导致用户流失。为了解决这一问题&#xff0c;Xinstall品牌推出了注册后自动绑定功能&#xff0c;极大提升了用户体验。 Xinstall的自动…

优惠券布局的最终方案------css属性mask

先贴图&#xff1a; 以上这些都是通过mask去实现出来&#xff1a; <!DOCTYPE html><html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"&g…

实战小项目 | ESP32-S3和ESP32-C3通过ESP-Mesh-Lite组网 温湿度传感器案例

传统Wi-Fi网络所有终端设备都需要直接与路由器相连&#xff0c;这使得Wi-Fi的覆盖区域受到路由器位置的限制&#xff0c;可接入终端设备的数量也受到路由器容量的限制。而乐鑫ESP-Mesh-Lite Wi-Fi组网方案&#xff0c;所有终端设备都可以与相邻设备连接&#xff0c;摆脱了对路由…

升级多款教育行业解决方案 星辰天合推动高校高质量发展

4 月 12-14 日&#xff0c;由江苏省高校教育信息化研究会网络信息管理专业委员&#xff08;以下简称&#xff1a;江苏高校网委会&#xff09;主办&#xff0c;河海大学网络安全与信息化办公室、常州大学信息化建设与管理处联合承办的 2024 研讨会暨学术年会在江苏金坛召开。本次…

IDjpg Ai:开启艺术风格的无限可能

在这个充满创意的时代&#xff0c;每个人都可以成为艺术家。IDjpg Ai&#xff0c;一款由人工智能AI模型驱动的图片转换工具&#xff0c;让您的照片瞬间变身为3D、卡通、线稿、动漫、电影等无限种艺术风格。这不仅仅是一款软件&#xff0c;它是您通往创意宇宙的钥匙。 一键转换&…

竞技游戏新纪元:如何打造满足现代玩家需求的极致体验?

文章目录 一、现代玩家需求分析二、以玩家体验为核心的游戏设计三、个性化与定制化服务四、强化社交互动与社区建设五、持续更新与优化《游戏力&#xff1a;竞技游戏设计实战教程》亮点编辑推荐内容简介目录获取方式 随着科技的飞速发展和游戏产业的不断壮大&#xff0c;现代玩…

代码随想录算法训练营第四十一天| 343. 整数拆分,96.不同的二叉搜索树

题目与题解 343. 整数拆分 题目链接&#xff1a;343. 整数拆分 代码随想录题解&#xff1a;343. 整数拆分 视频讲解&#xff1a;动态规划&#xff0c;本题关键在于理解递推公式&#xff01;| LeetCode&#xff1a;343. 整数拆分_哔哩哔哩_bilibili 解题思路&#xff1a; 一眼懵…

Banana Pi开源社区推出BPI-5202开发板,国产龙芯Loongson 2K1000LA

BPI-5202开发板&#xff0c;国产龙芯Loongson 2K1000LA BPI-5202作为单纯的嵌入式通用控制器软硬件开发平台&#xff0c;采用龙芯2K1000LA芯片设计&#xff0c;基本配置中有2个独立MAC以太网端口、2个RS485端口1个RS232端口2个CAN2.0端口&#xff0c;配置灵活&#xff0c;广泛适…

SQL注入利用学习 - 延时盲注

延时盲注原理 无法利用页面显示结果判断SQL注入是否执行成功&#xff0c;此时可以利用 SQL语句执行的延时 判断SQL是 否执行成功。 只要可以执行延时&#xff0c;那么就可以利用该注入技术。 sql时间类型的盲注本质是利用插入的SQL语句执行造成时间延迟&#xff0c;插入的SQ…

树莓派安装tensorflow

使用编译好的版本 下载tensorflow编译好的版本 https://github.com/lhelontra/tensorflow-on-arm/tags由于python版本支持有限可能需要自己安装python 安装对应的python 自己选择版本进行编译

TQZC706开发板教程:使用vivado2023_1创建hello_world工程

打开Vivado2023.1-->创建工程-->输入工程名称-->选择保存地址-->下一步 勾选不添加文件-->下一步 搜索7z045ffg-->选择xc7z045ffg900-2-->下一步&#xff0c;finish完成工程创建 添加设计-->设置名称-->OK 添加IP-->搜索zynq-->双击确定选择 …