Leetcode 797. All Paths From Source to Target

Posted sylvanyang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 797. All Paths From Source to Target相关的知识,希望对你有一定的参考价值。

题目链接:https://leetcode.com/problems/all-paths-from-source-to-target/description/

Given a directed, acyclic graph of N nodes.  Find all possible paths from node 0 to node N-1, and return them in any order.

The graph is given as follows:  the nodes are 0, 1, ..., graph.length - 1.  graph[i] is a list of all nodes j for which the edge (i, j) exists.

Example:
Input: [[1,2], [3], [3], []] 
Output: [[0,1,3],[0,2,3]] 
Explanation: The graph looks like this:
0--->1
|    |
v    v
2--->3
There are two paths: 0 -> 1 -> 3 and 0 -> 2 -> 3.

Note:

  • The number of nodes in the graph will be in the range [2, 15].
  • You can print different paths in any order, but you should keep the order of nodes inside one path.

看完题目描述,直觉就是DFS搜索解空间树。因为不是二维表格所以不好用DP,同时是无环图所以感觉比较像DFS。代码如下:

class Solution(object):
    def allPathsSourceTarget(self, graph):
        """
        :type graph: List[List[int]]
        :rtype: List[List[int]]
        """
        res = []
        target = len(graph) - 1
        self.dfs([0], res, graph[0], graph, target)
        return res
        
    def dfs(self, curr_sol, res, curr_node, graph, target):
        if not curr_node:
            return
        for nxt in curr_node: 
            if nxt == target:
                res.append(curr_sol + [nxt])
            else:
                self.dfs(curr_sol+[nxt], res, graph[nxt], graph, target)

感觉是一道很标准的DFS,没有什么难点。

以上是关于Leetcode 797. All Paths From Source to Target的主要内容,如果未能解决你的问题,请参考以下文章

797. All Paths From Source to Target

leetcode1466. Reorder Routes to Make All Paths Lead to the City Zero

LeetCode 797. 所有可能的路径

LeetCode 797. 所有可能的路径

257. Binary Tree Paths

LeetCode Algorithm 797. 所有可能的路径