Cycle Detection & Topo Sort

class Solution {
private:
    // 有向图
    vector<vector<int>> edges;
    vector<int> visited;
    vector<int> onPath;
    // 拓扑排序
    vector<int> result;
    // 判断是否可以拓扑排序
    bool valid = true;

public:
    void explore(int u) {
        visited[u] = 1;
        onPath[u] = 1;
        for (int v: edges[u]) {
            if (onPath[v]) {
                valid = false;
                return;
            }
            if (!visited[v]) {
                explore(v);
                if (!valid) {
                    return;
                }
            }
        }

        result.push_back(u);  // Post order.
        onPath[u] = 0;
    }

    vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
        edges.resize(numCourses);
        onPath.resize(numCourses, 0);
        visited.resize(numCourses, 0);
        for (const auto& info: prerequisites) {
            edges[info[1]].push_back(info[0]);
        }

        for (int i = 0; i < numCourses && valid; ++i) {
            if (!visited[i]) {
                explore(i);
            }
        }
        if (!valid) {
            return {};
        }

        reverse(result.begin(), result.end());
        return result;
    }
};

全部评论

相关推荐

09-23 17:42
门头沟学院 Java
兄弟们我绷不住了,小米要求10月份参加编程考试,20级以下(王腾好像21),正式和外包都得去,还要部门大排名,一巴掌给我抽象的回到大学
flex*1022:雷:我们想了很久,到底怎么样才能让用户满意,让工程师保持手感,经过长达180天的思考,我连夜睡服高管,决定发起内部考试,以编程为主
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
09-02 11:14
已编辑
四川大学 Java
吴offer选手:这种面试是最烦的,学不到东西,然后还被挂的莫名其妙。之前看到一种说法是面试官如果不想要你了,就会问一些很简单的问题,防止你举报他
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务