leetcode 797.所有可能的路径

思路: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;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值