返回

797. 所有可能的路径(图打印两点之间的所有路径)————附带详细代码

发布时间:2023-02-15 18:54:26 200

0 结果

在这里插入图片描述

1 题目

在这里插入图片描述

2 思路

  • 使用深度搜索(DFS)图,从0开始出发,一边遍历一边把顶点存入到临时路径中,如果遍历到目的点n-1,则把临时路径存入到答案路径ans中;
  • 如果从0开始遍历到产生递归回退的时候(即退栈的时候,在图中的含义就是该顶点所连的顶点都已被访问过),每回退一次(每弹出一个顶点),把该顶点重新置为未访问,以便后面其他路径访问。

3 代码

class Solution {
public:
    vector> allPathsSourceTarget(vector>& graph) {
        int n = graph.size();
        vector G[n];
        for(int i = 0; i < n;i++){
            for(int j = 0;j < graph[i].size();j++){
                G[i].push_back(graph[i][j]);
            }
        }

//        for(auto i:G){//打印邻接表
//            for(auto j:i){
//                cout<> ans;
        vector path;
        bool vis[16] = {false};
        auto DFS = [&](int u, int depth){
            auto f = [&](auto&& self, int u, int depth)->void {
                vis[u] = true;
                path.push_back(u);
                if(u == n - 1){
                    ans.push_back(path);
                }
                for(int i = 0; i < G[u].size();i++){
                    int v = G[u][i];
                    if(vis[v] == false){
                        self(self, v, depth + 1);
                    }
                }
                vis[u] = false;
                path.pop_back();
            };
            return f(f, u, depth);
        };
        DFS(0, 0);
        return ans;
    }
};

测试代码:

    //[[1,2],[3],[3],[]]
    //[[4,3,1],[3,2,4],[3],[4],[]]
    //vector>edgs {{1,2}, {3},{3},{}};
    vector>edgs {{4,3,1}, {3,2,4},{3},{4},{}};

    Solution s;
    vector>ans = s.allPathsSourceTarget(edgs);

    cout<
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线