207. Course Schedule(week 4)

来源:互联网 发布:java输出回文数 编辑:程序博客网 时间:2024/04/29 03:59

207. Course Schedule

拓扑排序思路:

用一个队列维护所有入度为0的节点,每次弹出一个节点v,查看从v可达的所有节点u;将u的入读减一,更新入度的过程的时候,若u的入度此时为0, 则将u加入队列。在队列为空时,检查所有节点的入度,若所有节点入度都为0, 则存在这样的一个拓扑排序 —— 有向图中不存在环。找不到最短路径的题目,就找个拓扑排序的,

class Solution {public:    bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) {        int len = prerequisites.size();        //初始化度        int degree[numCourses];        memset(degree,0,sizeof(degree));        for(int i = 0; i < len; i++){            degree[prerequisites[i].first]++;        }        //这里用队列也行,其他的STL也可以        queue<int> myqueue;        int result = 0;        for(int i = 0;i<numCourses;i++)        {            if(degree[i]==0){                myqueue.push(i);                result++;            }        }        while(!myqueue.empty()){            int node  = myqueue.front();            myqueue.pop();            for(int i = 0; i < len; i++){                if(prerequisites[i].second==node){                    degree[prerequisites[i].first]--;                    if(!degree[prerequisites[i].first]){                        myqueue.push(prerequisites[i].first);                        result++;                    }                }            }        }        //如果全部都已经入过队列就返回true,否则喂false        if(result==numCourses){            return true;        }        else         return false;    }};
0 0