0
点赞
收藏
分享

微信扫一扫

797. All Paths From Source to Target**

797. All Paths From Source to Target**

​​https://leetcode.com/problems/all-paths-from-source-to-target/​​

题目描述

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.

C++ 实现 1

使用 DFS + Backtracing. 由于 Graph 是有向无环图, 可以不用考虑已经访问 neighbors 会有自己的问题. 由于 path 的目标是从 ​​0 -> N - 1​​​ 的所有路径, 起始点始终是 0, 而终点始终是 ​​N - 1​​​, 因此只有当 ​​path.back() == N - 1​​​ 时, 才将结果加入到 ​​res​​ 中.

class Solution {
private:
void dfs(const vector<vector<int>> &graph,
int node,
vector<int> &path, vector<vector<int>> &res) {
if (path.back() == graph.size() - 1) {
res.push_back(path);
return;
}
auto neighbors = graph[node];
for (auto &n : neighbors) {
path.push_back(n);
dfs(graph, n, path, res);
path.pop_back();
}
}
public:
vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& graph) {
vector<int> path{0};
vector<vector<int>> res;
dfs(graph, 0, path, res);
return res;
}
};

举报

相关推荐

0 条评论