思路:dfs。
其实很简单,我们只需要和昨天做的题一样,直接遍历所给数组中的元素,因为这里的数组意义已经很清楚了,就是当前位置的结点和哪一个顶点有联系。
注意:在存储路径的时候,我们需要按顺序存储,而不能在状态标志完之后再统计路径,这样的话顺序是不对的。
class Solution {
public:
vector<int>ans;
void init(){ans.push_back(0);
}
void dfs(int u,vector<vector<int>>&s,vector<bool>&st,vector<vector<int>>&res){if(u>s.size())return;if(u==s.size()-1){res.push_back(ans);return;}for(int i=0;i<s[u].size();i++){int num=s[u][i];if(!st[num]){st[num]=1;ans.push_back(num);dfs(num,s,st,res);if(ans.size()>=2)ans.pop_back();st[num]=0;}}
}vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& graph) {int n=graph.size();vector<bool>st(n,false);vector<vector<int>>res;st[0]=true;init();dfs(0,graph,st,res);return res;}
};