LeetCode *** 207. Course Schedule (Topological Sort )

来源:互联网 发布:ps mac版多少钱 编辑:程序博客网 时间:2024/06/18 14:04

题目:

There are a total of n courses you have to take, labeled from 0 ton - 1.

Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair:[0,1]

Given the total number of courses and a list of prerequisite pairs, is it possible for you to finish all courses?

For example:

2, [[1,0]]

There are a total of 2 courses to take. To take course 1 you should have finished course 0. So it is possible.

2, [[1,0],[0,1]]

There are a total of 2 courses to take. To take course 1 you should have finished course 0, and to take course 0 you should also have finished course 1. So it is impossible.

Note:
The input prerequisites is a graph represented by a list of edges, not adjacency matrices. Read more abouthow a graph is represented.


分析:

细节决定成败。。。


代码:

class Solution {public:    bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) {         int needed[numCourses]={};         int size=prerequisites.size();         stack<int> stk;         for(int i=0;i<size;++i)            needed[prerequisites[i].first]++;         for(int i=0;i<numCourses;++i)if(!needed[i])stk.push(i);         vector<pair<int,int>>::iterator it;         while(!stk.empty()&&!prerequisites.empty()){             int rec=stk.top();             stk.pop();                          it=prerequisites.begin();             while(it!=prerequisites.end()){                 if((*it).second==rec){                     needed[(*it).first]--;                     if(!needed[(*it).first])stk.push((*it).first);                     it=prerequisites.erase(it);                 }                 else ++it;             }         }         return prerequisites.empty();    }};

0 0
原创粉丝点击