【力扣】207.课程表

AC截图

题目

思路

这道题可以抽象为一个有向无环图,判断是否可以进行拓扑排序

①构建邻接表

vector<vector<int>> edge:下标代表节点编号,数组内容代表该结点的直接后置结点

vector<int> indegree:下标代表结点编号,数组内容代表该结点入度。在入度为0的时候,可以加入拓扑排序序列。

②将所有入度为0的结点加入队列

③进行bfs遍历

代码

cpp 复制代码
class Solution {
public:
    vector<vector<int>> edge;
    vector<int> indegree;
    bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
        edge.resize(numCourses);
        indegree.resize(numCourses);

        for(auto pre:prerequisites){
            edge[pre[1]].push_back(pre[0]);
            indegree[pre[0]]++;
        }

        queue<int> q;
        for(int i=0;i<numCourses;i++){
            if(indegree[i]==0){
                q.push(i);
            }
        }

        int visit=0;
        while(!q.empty()){
            visit++;
            int u = q.front();
            q.pop();

            for(int v:edge[u]){
                indegree[v]--;
                if(indegree[v]==0){
                    q.push(v);
                }
            }
        }

        return visit==numCourses;
    }
};
相关推荐
手握风云-7 小时前
回溯剪枝的 “减法艺术”:化解超时危机的 “救命稻草”(二)
算法·机器学习·剪枝
QiZhang | UESTC7 小时前
JAVA算法练习题day11
java·开发语言·python·算法·hot100
屁股割了还要学7 小时前
【数据结构入门】排序算法(4)归并排序
c语言·数据结构·学习·算法·排序算法
Tisfy7 小时前
LeetCode 0966.元音拼写检查器:三个哈希表实现
leetcode·字符串·散列表·题解·哈希表
努力学习的小廉8 小时前
我爱学算法之—— 位运算(上)
c++·算法
ゞ 正在缓冲99%…8 小时前
leetcode35.搜索插入位置
java·算法·leetcode·二分查找
lifallen8 小时前
字节跳动Redis变种Abase:无主多写架构如何解决高可用难题
数据结构·redis·分布式·算法·缓存
feifeigo1239 小时前
星座SAR动目标检测(GMTI)
人工智能·算法·目标跟踪
WWZZ20259 小时前
视觉SLAM第10讲:后端2(滑动窗口与位子图优化)
c++·人工智能·后端·算法·ubuntu·机器人·自动驾驶
YuTaoShao9 小时前
【LeetCode 每日一题】36. 有效的数独
linux·算法·leetcode