797 - All Paths From Source To Target
#medium
Given a directed acyclic graph (DAG) of n
nodes labeled from 0
to n - 1
, find all possible paths from node 0
to node n - 1
and return them in any order.
The graph is given as follows: graph[i]
is a list of all nodes you can visit from node i
(i.e., there is a directed edge from node i
to node graph[i][j]
).
Example 1:
Input: graph = [ [1,2],[3],[3],[] ]
Output: [ [0,1,3],[0,2,3] ]
Explanation: There are two paths: 0 -> 1 -> 3 and 0 -> 2 -> 3.
Example 2:
Input: graph = [ [4,3,1],[3,2,4],[3],[4],[] ]
Output: [ [0,4],[0,3,4],[0,1,3,4],[0,1,2,3,4],[0,1,4] ]
class Solution {
public:
vector<vector<int>> result;
vector<int> path;
// x為當前節點index
void dfs( vector<vector<int>> graph, int x ) {
if ( x == graph.size() - 1 ) {
result.push_back( path );
return;
}
// 單個node到其他node的方法
for ( int i = 0; i < graph[x].size(); i++ ) {
path.push_back( graph[x][i] );
dfs( graph, graph[x][i] );
path.pop_back();
}
}
vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& graph) {
path.push_back( 0 );
dfs( graph, 0 );
return result;
}
DFS
void dfs(參數) {
if (終止條件) {
存放結果;
return;
}
for (選擇:本節點所連接的其他節點) {
處理節點;
dfs(圖,選擇的節點); // 遞歸
回溯,撤銷處理結果
}
}