拓扑排序算法
来源:互联网 发布:淘宝上买茶叶靠谱吗 编辑:程序博客网 时间:2024/06/05 03:55
拓扑排序
【任务】
对一个有向无环图拓扑排序
【说明】
用一个队列实现,先把入度为0的点放入队列。然后考虑不断在图中删除队列中的点,每次删除一个点都会产生一些新的入度为0的点,把这些点插入队列。
【接口】
bool toposort();
复杂度:O(|V| + |E|)
输入:n 全局变量,表示点数
g 全局变量, g[i] 表示从点i连出去的边
输出:返回对给定的图,是否可以拓扑排序
L 全局变量,拓扑排序的结果
【任务】
对一个有向无环图拓扑排序
【说明】
用一个队列实现,先把入度为0的点放入队列。然后考虑不断在图中删除队列中的点,每次删除一个点都会产生一些新的入度为0的点,把这些点插入队列。
【接口】
bool toposort();
复杂度:O(|V| + |E|)
输入:n 全局变量,表示点数
g 全局变量, g[i] 表示从点i连出去的边
输出:返回对给定的图,是否可以拓扑排序
L 全局变量,拓扑排序的结果
【代码】
const int maxn = 100000 + 5;vector<int> g[maxn];int du[maxn], n, m, L[maxn];bool toposort(){memset(du, 0, sizeof(du));for(int i = 0; i < n; i++){for(int j = 0; j < g[i].size(); j++){du[g[i][j]]++;} } int tot = 0;queue<int> Q;for(int i = 0; i < n; i++){if(!du[i]) Q.push(i);}while(!Q.empty()){int x = Q.front(); Q.pop();L[tot++] = x;for(int j = 0; j < g[x].size(); j++){int t = g[x][j];du[t]--;if(!du[t]){Q.push(t);}}}if(tot == n) return 1;return 0;}
0 0
- 贪婪算法--- 拓扑排序
- 贪婪算法--- 拓扑排序
- 拓扑排序算法
- 拓扑排序算法
- 拓扑排序算法
- 【算法导论】拓扑排序
- 【算法导论】拓扑排序
- 拓扑排序算法
- 拓扑排序算法
- 拓扑排序算法
- 拓扑排序算法
- 算法 拓扑排序
- 算法 拓扑排序
- 拓扑排序算法
- 算法摘记 拓扑排序
- 拓扑排序算法
- 【数据结构】拓扑排序算法
- 拓扑排序算法模板
- Iterator迭代器设计模式学习(对象行为型)
- python内部函数和常用工具函数
- Nginx+Tomcat 反向代理配置
- Android 颜色XML记录
- tq210项目启动
- 拓扑排序算法
- Java多线程系列--“JUC锁”01之 框架 (r)
- Xcode直接显示图片插件KSImageNamed
- Haproxy日志问题解决
- [游戏技术]求生之路服务器参数配置
- Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock (r)
- 嘿,今天就是开始吧!
- linux软件安装管理与安装RPM时的挂载的概念
- 20160731------while循环、一维数组、Arrays类方法及练习