1,题目要求
给定一个二维的数组,分别表示对应节点以及该节点所对应的有向边。求出所有的从起始到结束的路径。
2,题目思路
对于这种所有路径的搜索问题,用到的是递归的办法来实现。定义一个DFS函数,用到了深度优先搜索的办法。从0开始,每进行一次就将当前的点加入path之中,如果找到一条从0-des的路径,就将path加入到paths之中。最后,当遍历完所有的节点时,返回得到的paths即可。
3,程序源码
class Solution {
public:
vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& graph) {
vector<vector<int>> paths {};
vector<int> path {};
int total = graph.size();
if(total == 0) return paths;
dfs(graph, paths, path, 0, total - 1);
return paths;
}
private:
void dfs(vector<vector<int>>& graph, vector<vector<int>>& paths, vector<int> path, int begin, int des)
{
path.push_back(begin);
if(begin == des)
{
paths.push_back(path);
return;
}
for(int node : graph[begin])
dfs(graph, paths, path, node, des);
}
};