Problem#
給你一個 n
個點的有向無環圖(DAG),問你可不可以找到所有從 0
到 n-1
的路徑。
想法#
- 時間複雜度: O(n+m) (
n
個點,m
條邊) - 空間複雜度: O(n)
AC Code#
DFS + backtracking
Copy
class Solution { public: vector<vector<int>> G; vector<int> p; vector<bool> vis; vector<vector<int>> ans; void solve(int fr, int to) { if(fr == to) { ans.push_back(p); return; } for(int i : G[fr]) { if(!vis[i]) { vis[i] = true; p.push_back(i); solve(i, to); p.pop_back(); vis[i] = false; } } } vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& graph) { G = graph; int n = G.size(); vis.resize(n); vis[0] = true; p.push_back(0); solve(0, n-1); return ans; } };