设为首页 加入收藏

TOP

LeetCode 210. Course Schedule II(拓扑排序-求有向图中是否存在环)
2015-11-21 00:56:21 来源: 作者: 【 】 浏览:1
Tags:LeetCode 210. Course Schedule 拓扑 排序 向图中 是否 存在

和LeetCode 207. Course Schedule(拓扑排序-求有向图中是否存在环)类似。

?

注意到,在for (auto p: prerequistites)中特判了输入中可能出现的平行边或自环。

?

代码:

?

class Solution 
{
public:
    vector
  
    findOrder(int numCourses, vector
   
    >& prerequisites) { // [0, {1, 2, 3}], means after finishing #0, you might be able to take #1, #2, #3 // That is, you must finish #0, before trying to take #1, #2, #3 map
    
     > course_chain; vector
     
       in_degree(numCourses, 0); queue
      
        q; vector
       
         ret; for (auto p: prerequisites) { // self-loop, return empty vector. if (p.first == p.second) { return vector
        
         (); } // no duplicate edges input if (find(course_chain[p.second].begin(), course_chain[p.second].end(), p.first) == course_chain[p.second].end()) { course_chain[p.second].push_back(p.first); ++ in_degree[p.first]; } } for (size_t i = 0; i < numCourses; ++ i) { if (in_degree[i] == 0) { q.push(i); } } for (; !q.empty(); q.pop()) { int pre_course = q.front(); ret.push_back(pre_course); for (auto it = course_chain[pre_course].begin(); it != course_chain[pre_course].end(); ++ it) { -- in_degree[*it]; if (in_degree[*it] == 0) { q.push(*it); } } } return ret.size()==numCourses? ret: vector
         
          (); } };
         
        
       
      
     
    
   
  


?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇poj(2184)――Cow Exhibition(01.. 下一篇C++对象模型――Data Member的绑..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: