LeetCode 207. Course Schedule [Medium]

来源:互联网 发布:心理教学软件 编辑:程序博客网 时间:2024/05/16 19:22

原题地址

题目内容

这里写图片描述

题目分析

题目的意思为,在上某一门课前,可能会需要有前导课程,假设某学生需要上N门课,给出课程的前导课程,问是否能修完。大概就是判断一个图里面有没有环,有环的话就无法修完。首先遍历整个图,将每个节点的入度记录下来,维护一个队列,记录当前入度为0的节点,队列每弹出一个节点就对整个图的入度做一次修改,弹出的节点保存在res队列中,表示该门课程可以修完,最后看res的size是否与N相同。

代码实现

class Solution {public:    bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) {        int indegree[numCourses] = {0};        for(auto edge:prerequisites){            indegree[edge.first]++;        }        queue<int> temp;        queue<int> res;        for(int i = 0; i < numCourses; i++){            if(indegree[i] == 0){                temp.push(i);            }        }        while(temp.size()){            int num = temp.front();            temp.pop();            res.push(num);            for(auto edge:prerequisites){                if(edge.second == num){                    indegree[edge.first]--;                    if(indegree[edge.first] == 0){                        temp.push(edge.first);                    }                }            }        }        return res.size() == numCourses;    }};
原创粉丝点击