LeetCode Course Schedule II
来源:互联网 发布:mac返回桌面 编辑:程序博客网 时间:2024/05/17 03:47
拓扑排序的题目。之前写了一个简单的做法,使用n*n的矩阵来保存图。时间复杂度是O(n^2)
改用邻接表来描述图。同时使用一个数组来记录每个结点的入度。初始化都为零。依次读入边,将边加入邻接表并将记录结点入度数组对应计数加一
读入完成后使用一个队列来记录所有入度为零的结点等待输出。
每次从队列中弹出一个结点,并扫描其邻接表所有邻接结点,将所有邻接结点的入度减一,如果入度为零了,将其加入到队列中。
循环处理队列,直到队列为空。结束循环后判断是否输出序列长度是否为所有结点的个数。若是,则有拓扑排序,若不是,则没有。代码如下:
struct node{int val;node *next;node(int _val = 0) :val(_val), next(NULL){}};class Solution {public: vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) {node* point2;point2 = new node[numCourses];queue<int> waitOutCourse;int *privCourse = new int[numCourses];memset(privCourse, 0, sizeof(int)*numCourses);vector<int> result;for (int i = 0; i < prerequisites.size(); ++i){privCourse[prerequisites[i].first]++;node *p = &point2[prerequisites[i].second];while (p->next != NULL)p = p->next;p->next = new node(prerequisites[i].first);}for (int i = 0; i < numCourses;++i)if (privCourse[i] == 0)waitOutCourse.push(i);while (!waitOutCourse.empty()){int cno = waitOutCourse.front();waitOutCourse.pop();result.push_back(cno);node *p = point2[cno].next;while (p != NULL){--privCourse[p->val];if (privCourse[p->val] == 0)waitOutCourse.push(p->val);node *q = p->next;delete p;p = q;}}delete []point2;delete []privCourse;if (result.size() == numCourses) return result;else return vector<int>();}};
0 0
- [leetcode]Course Schedule II
- leetcode - Course Schedule II
- LeetCode Course Schedule II
- [leetcode] Course Schedule II
- leetcode:Course Schedule II
- [LeetCode] Course Schedule II
- Leetcode Course Schedule II
- 【leetcode】Course Schedule II
- leetcode Course Schedule II
- LeetCode Course Schedule II
- [leetcode] Course Schedule II
- #leetcode#Course Schedule II
- LeetCode Course Schedule II
- leetcode Course Schedule II
- Course Schedule II -- leetcode
- Leetcode: Course Schedule II
- [Leetcode] Course Schedule II
- LeetCode -- Course Schedule II
- Lua 与C/C++ 交互系列: Lua调用C/C++函数(3)
- C#中序列化的应用
- ubuntu arm软件开发环境配置
- leetcode--Add and Search Word - Data structure design
- C# 闭包
- LeetCode Course Schedule II
- 安装Ubuntu
- mysql测试工具详细介绍
- 数据挖掘导论习题常用数学公式
- logandfileandconfigandconverion
- java基础—Date类的常见方法演示
- 蓄水池算法简介
- 如何关闭centos的防火墙
- HMM隐马尔科夫模型