题目地址:
https://leetcode.com/problems/all-paths-from-source-to-target/
给定一个有向图,顶点编号为 0 ∼ N − 1 0\sim N-1 0∼N−1,以邻接表形式给出。要求返回所有从 0 0 0到 N − 1 N-1 N−1的路径。题目保证图没有环。
思路是DFS,只需注意递归回溯的时候要恢复现场。代码如下:
class Solution {
public:
int n;
vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& g) {
n = g.size();
vector<vector<int>> res;
vector<int> v;
dfs(0, v, g, res);
return res;
}
void dfs(int u, vector<int>& path, vector<vector<int>>& g,
vector<vector<int>>& res) {
path.push_back(u);
if (u == n - 1) {
res.push_back(path);
path.pop_back();
return;
}
for (int i = 0; i < g[u].size(); i++) dfs(g[u][i], path, g, res);
path.pop_back();
}
};
时间复杂度 O ( V + E ) O(V+E) O(V+E),空间复杂度 O ( V ) O(V) O(V)。