代码随想录图论

1. 所有可能的路径

class Solution:
    def allPathsSourceTarget(self, graph: List[List[int]]) -> List[List[int]]:
        
        def dfs(graph, result, path, root):     #result 返回结果, path记录路径, root记录遍历到了第几个节点
            if root == len(graph) - 1:          #如果遍历到最后一个节点,记录结果并返回
                result.append(path.copy())      
                return
            for i in graph[root]:               #遍历每个节点下一个能到的下一个节点
                path.append(i)                  #path直接添加
                dfs(graph, result, path, i)     #dfs递归, 输入的root直接变成i,也就是当前遍历的下一个
                path.pop()                      #回溯
        result = []
        path = [0]                              #初始化的时候path里已经有最初始的节点位置
        root = 0                                #起始节点为0
        dfs(graph, result, path, root)
        return result

实际上就是回溯算法,区别在于:之前做的回溯的题目一般是列表里面一个一个元素遍历,所以在递归的时候有一个star_index变量,控制选与不选当前元素。

而dfs搜索找下一个节点的时候,不用一个个遍历graph中的节点,而是只需要遍历当前节点能到达的节点,因为如果当前节点都到不了的节点,就没有必要往后遍历了。

因此递归的dfs的输入就变成了当前遍历的节点i

相关推荐

  1. 代码随想-

    2024-04-13 05:38:04       13 阅读
  2. 代码随想(番外)2

    2024-04-13 05:38:04       12 阅读
  3. 代码随想(番外)4

    2024-04-13 05:38:04       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-13 05:38:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-13 05:38:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-13 05:38:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-13 05:38:04       20 阅读

热门阅读

  1. 图论中的模板

    2024-04-13 05:38:04       17 阅读
  2. LeetCode:1两数之和 C语言

    2024-04-13 05:38:04       12 阅读
  3. 软考之零碎片段记录(十三)+复习巩固(八)

    2024-04-13 05:38:04       14 阅读
  4. nodejs安装及环境配置

    2024-04-13 05:38:04       16 阅读
  5. 链表题(哑结点的使用)

    2024-04-13 05:38:04       14 阅读
  6. Photoshop小记

    2024-04-13 05:38:04       18 阅读
  7. CentOS版本不同大小的各个版本区别

    2024-04-13 05:38:04       15 阅读