LeetCode第797题: 所有可能的路径

目录

1.问题描述

2.问题分析


1.问题描述

        给你一个有 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]]

  • n == graph.length

  • 2 <= n <= 15

  • 0 <= graph[i][j] < n

  • graph[i][j] != i(即不存在自环)

  • graph[i] 中的所有元素互不相同

  • 保证输入为有向无环图(DAG)

2.问题分析

        思路分析:有向无环图(Directed acyclic graph, DAG)是图论中的一个概念,它指的是一个无回路的有向图。问题是要找到0节点到n − 1节点的所有路径,对于所有路径的问题,我们可以用深度优先搜索来做(广度优先搜索也可以)。

        这题让在有向无环图中输出从顶点0到顶点n-1的所有路径,可以使用dfs,从顶点0开始搜索,搜索所有路径,因为是无环的,所以搜索的时候不会出现死循环。到顶点n-1的时候就把这条路径上所有的点都保存下来。因为是dfs搜索,往下走的时候选择节点,往回走的时候要记得撤销选择。

JAVA

public List<List<Integer>> allPathsSourceTarget(int[][] graph) {List<List<Integer>> ans = new ArrayList<>();ArrayList<Integer> path = new ArrayList<>();path.add(0);// 把起始节点0加进来dfs(graph, 0, ans, path);return ans;
}private void dfs(int[][] graph, int index, List<List<Integer>> ans, List<Integer> path) {//  到最后一个节点的时候,说明找了一个一条有效路径if (index == graph.length - 1) {ans.add(new ArrayList<>(path));return;}// 当前节点指向哪些节点(可以看做是n叉树的子节点,然后遍历他的子节点)int[] directs = graph[index];for (int i = 0; i < directs.length; i++) {path.add(directs[i]);// 把当前节点加入到路径中dfs(graph, directs[i], ans, path);// 递归path.remove(path.size() - 1); // 撤销选择}
}

C++

public:vector<vector<int>> allPathsSourceTarget(vector<vector<int>> &graph) {vector<vector<int>> ans;vector<int> path;path.push_back(0);// 把起始节点0加进来dfs(graph, 0, ans, path);return ans;}void dfs(vector<vector<int>> &graph, int index, vector<vector<int>> &ans, vector<int> &path) {//  到最后一个节点的时候,说明找了一个一条有效路径if (index == graph.size() - 1) {ans.emplace_back(path);return;}// 当前节点指向哪些节点(可以看做是n叉树的子节点,然后遍历他的子节点)for (int g: graph[index]) {path.emplace_back(g);// 把当前节点加入到路径中dfs(graph, g, ans, path);// 递归path.pop_back(); // 撤销选择}}

C

void dfs(int **graph, int graphSize, int *graphColSize, int *returnSize,int **returnColumnSizes, int **ans, int *path, int v, int count) {//  到最后一个节点的时候,说明找了一个一条有效路径if (v == graphSize - 1) {ans[*returnSize] = malloc(count * sizeof(int));memcpy(ans[*returnSize], path, count * sizeof(int));(*returnColumnSizes)[(*returnSize)++] = count;return;}// 当前节点指向哪些节点(可以看做是n叉树的子节点,然后遍历他的子节点)for (int i = 0; i < graphColSize[v]; ++i) {path[count++] = graph[v][i];// 把当前节点加入到路径中dfs(graph, graphSize, graphColSize, returnSize, returnColumnSizes, ans, path, graph[v][i], count);// 递归count--;// 撤销选择}
}int **allPathsSourceTarget(int **graph, int graphSize, int *graphColSize, int *returnSize, int **returnColumnSizes) {int **ans = malloc(20000 * sizeof(int *));int *path = malloc(15 * sizeof(int));int v = 0;int count = 0;*returnSize = 0;*returnColumnSizes = malloc(20000 * sizeof(int));path[count++] = v;// 把起始节点0加进来dfs(graph, graphSize, graphColSize, returnSize, returnColumnSizes, ans, path, v, count);return ans;
}

Python

def allPathsSourceTarget(self, graph: List[List[int]]) -> List[List[int]]:def dfs(index):# 到最后一个节点的时候,说明找了一个一条有效路径if index == len(graph) - 1:ans.append(path[:])return# 当前节点指向哪些节点(可以看做是n叉树的子节点,然后遍历他的子节点)for direct in graph[index]:path.append(direct)  # 把当前节点加入到路径中dfs(direct)  # 递归path.pop()  # 撤销选择ans = []path = [0]dfs(0)return ans

复杂度分析

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

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

相关文章

[论文精读]Masked Autoencoders are scalable Vision Learners

摘要本文证明了掩码自编码器(MAE)是一种可扩展的计算机视觉自监督学习算法。我们的 MAE方法很简单:我们盖住输入图像的随机块并重建缺失的像素。它基于两个核心设计。首先&#xff0c;我们开发了一个非对称编码器-解码器架构&#xff0c;其中一个编码器仅对块的可见子集(没有掩…

Linux中如何安装ImageMagick及其常规使用命令

在Linux中安装ImageMagick可以通过包管理工具进行安装。具体步骤如下&#xff1a; 打开终端&#xff08;Terminal&#xff09;。 使用以下命令更新系统软件包列表&#xff1a; sudo apt update使用以下命令安装ImageMagick&#xff1a; sudo apt install imagemagick安装完…

Codeforces Round 924 (Div. 2) ---- F. Digital Patterns ---- 题解

F. Digital Patterns&#xff1a; 题目描述&#xff1a; 思路解析&#xff1a; 要求在一个方块中&#xff0c;任意相邻的方块中他的透明度系数不能相同&#xff0c;这样的方块称为趣味性方块&#xff0c;问这样的方块有多少种。 那么我们可以相当&#xff0c;假设 a1 a2, 那…

求交错且分母为阶乘的和(java)

import java.util.*; public class APP1{public static void main(String[] args){double sum0.0;int n0;int flag1;int fm1;Scanner reader new Scanner(System.in);System.out.println("请输入n的值&#xff1a;");nreader.nextInt();for(int i0;i<n;i){fm*i; …

物理页采样内核配置damon和perf

一、安装报错Missing file: arch/x86/boot/bzImage [sudo] password for xmu: arch/x86/Makefile:142: CONFIG_X86_X32 enabled but no binutils support sh ./arch/x86/boot/install.sh 5.15.19-htmm-test1 \arch/x86/boot/bzImage System.map "/boot"*** Missing…

Redis中的Lua脚本(二)

Lua脚本 创建排序辅助函数 为了防止带有副作用的函数令脚本产生不一致的数据&#xff0c;Redis对math库的math.random函数和math.randomseed函数进行了替换。对于Lua脚本来说&#xff0c;另一个可能产生不一致数据的地方是哪些带有不确定性质的命令&#xff0c;比如对于一个集…

python爬虫之环境配置(1)

一、安装python &#xff08;1&#xff09;下载python安装包 Python Releases for Windows | Python.org &#xff08;2&#xff09;傻瓜式安装python 安装成功 二、安装PyCharm (1&#xff09;下载安装包 Professional&#xff1a;专业版&#xff08;建议选择专业版&am…

前端CSS基础4(像素,颜色,字体属性大小复合属性)

前端CSS基础4&#xff08;像素&#xff0c;颜色&#xff0c;字体属性大小复合属性&#xff09; CSS代码编写位置CSS像素CSS颜色CSS常用字体属性和大小字体的复合属性 CSS代码编写位置 在HTML文件的头部使用 <head><style>/* 在这里编写CSS代码 */</style> …

VsCode调试远程服务器上面的Docker容器

第一步 VsCode 连接ssh 下载安装VsCode(Visual Studio Code)&#xff0c;首次安装会提示你安装Chinese(Simplified)中文简体&#xff0c;安装完后重新打开就是汉化界面了。在左边侧边栏找到扩展选项&#xff0c;然后安装Remote Development插件&#xff0c;里面包含了Remote S…

Redis中的Lua脚本(三)

Lua脚本 EVAL命令的实现 EVAL命令的执行过程可以分为以下三个步骤: 1.根据客户端给定的Lua脚本&#xff0c;在Lua环境中定义一个Lua函数2.将客户端给定的脚本保存到lua_scripts字典&#xff0c;等待将来进一步使用3.执行刚刚在Lua环境中定义的函数&#xff0c;以此来执行客户…

数据应用OneID:ID-Mapping Spark GraphX实现

前言 说明 以用户实体为例&#xff0c;ID 类型包含 user_id 和 device_id。当然还有其他类型id。不同id可以获取到的阶段、生命周期均不相同。 device_id 生命周期通常指的是一个设备从首次被识别到不再活跃的整个时间段。 user_id是用户登录之后系统分配的唯一标识&#xff…

【详细介绍下图搜索算法】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估

目录 一、说明 二、Deepset SQUAD是个啥&#xff1f; 三、问答系统&#xff08;QA系统&#xff09;&#xff0c;QA系统在各行业的应用及基本原理 3.1 医疗 3.2 金融 3.3 顾客服务 3.4 教育 3.5 制造业 3.6 法律 3.7 媒体 3.8 政府 四、在不同行业使用QA系统的基本原理 五、关于…

使用自己训练好的模型YOLOv8进行X-AnyLabeling自动标注

目录 1. 下载项目2. 创建环境3. 运行程序3.1 自行下载和添加官方模型3.2 使用自己训练好的模型标注自己的数据集 本机环境&#xff1a;win 10&#xff0c; GPU 1. 下载项目 git clone https://github.com/CVHub520/X-AnyLabeling.git2. 创建环境 仔细查看项目的README文件 …

游游的you矩阵

题目&#xff1a; 游游拿到了一个字符矩阵&#xff0c;她想知道有多少个三角形满足以下条件&#xff1a; 三角形的三个顶点分别是 y、o、u 字符。三角形为直角三角形&#xff0c;且两个直角边一个为水平、另一个为垂直。 输入描述&#xff1a; 第一行输入两个正整数n,m&#…

Root mapping definition has unsupported parameters: [all : {analyzer=ik_max_wor

你们好&#xff0c;我是金金金。 场景 我正在使用Springboot整合elasticsearch&#xff0c;在创建索引(分词器) 运行报错&#xff0c;如下 排查 排查之前我先贴一下代码 import org.elasticsearch.action.admin.indices.create.CreateIndexRequest; // 注意这个包SpringBootTe…

文字转语音工具:GPT-SoVITS

诸神缄默不语-个人CSDN博文目录 OpenAI官方的TTS模型我在这篇博文中给出了使用教程&#xff1a;ChatGPT 3.5 API的调用不全指南&#xff08;持续更新ing…&#xff09; - 知乎 但是OpenAI的TTS对中文支持不好&#xff0c;有一种老外说中文的美&#xff0c;所以本文介绍另一个…

自己的事情自己做:使用 Python Turtle 绘制 Python Logo

以下代码中&#xff0c;将向你展示一个有趣的程序&#xff0c;如何使用 Python Turtle 中绘制 Python Logo。Python 翻译成汉语是蟒蛇的意思&#xff0c;Python 的 Logo 也是两条缠绕在一起的蟒蛇。 import turtlepen turtle.Turtle() turtle.bgcolor("black") pe…

ins视频批量下载,instagram批量爬取视频信息【爬虫实战课1】

简介 Instagram 是目前最热门的社交媒体平台之一,拥有大量优质的视频内容。但是要逐一下载这些视频往往非常耗时。在这篇文章中,我们将介绍如何使用 Python 编写一个脚本,来实现 Instagram 视频的批量下载和信息爬取。 我们使用selenium获取目标用户的 HTML 源代码,并将其保存…

Python路面车道线识别偏离预警

程序示例精选 Python路面车道线识别偏离预警 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《Python路面车道线识别偏离预警》编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易…