Topological_Sort_With_Critical_Path

参考网址

1 Topological_Sort

1.1 存储结构: 邻接表Adjacency_List

1.1.1 C语言下的struct 邻接表

在这里插入图片描述

1.1.2 vector<vector> adjList

代码实现

class Solution{
public:
    bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites)
    {
        /* Example Input: 3, [[1,0],[0,1],[4,5]] 
        *  那么, numCourses=4, dual_course_num=3
        */
        int dual_course_num = prerequisites.size();
        if(course_num == 0)
            return true; /* 如果没有课程当然可以学完 */
        //建立入度表, 并且初始化为0
        vector<int> in_degrees(numCourses, 0);
        vector<vector<int>> adjList(numCourses)//建立邻接表, 表中元素个数为所有课程总数

        for(auto node : prerequisites)
        {
            in_degrees[node.first] += 1; //入度+1
            adjList[node.second].emplace_back(node.first);
        }
        
        queue<int> q; //存储入度为0的node
        // 遍寻adjList, 寻找入度为0的node
        for(int i=0; i<numCourses; i++)
        {
            if(in_degrees[i] == 0)
                q.push(i);
        }
        
        int cnt = 0; //cnt : 输出的node数
        while(! q.empty())
        {
            int getTop = q.front();
            q.pop();
            ++cnt;
            
            /* 二维数组adjList[][], 遍历adjList的每一行 
            *  比如遍历adjList[i]这一行, 相当于邻接表
            */
            for(auto i : adjList[getTop])
            {
                in_degrees[i] -= 1;
                if(in_degrees[i] == 0)
                    q.push(i);
            }
        }
        
        return (cnt == numCourses);
    } // close method
};

2 Critical_Path

Diagram

在这里插入图片描述

关键路径

参考文献

  1. critical path
    如果不等那么说明活动还有余额时间(在最早开始时间和最迟开始时间之间可以任选一个时间点开始),这说明还有其他活动是决定这个工程时间的,那就不是关键路径了.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值