博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
拓扑排序
阅读量:5997 次
发布时间:2019-06-20

本文共 1035 字,大约阅读时间需要 3 分钟。

拓扑排序

要用list,不能用vector,确保删除边的开销为O(1)。

因为主循环中,总共要从队列中pop掉n个数(点),然后总共要删e条边,删点和边的开销都是O(1)。所以整个时间复杂度就是O(n+e)。

如果最终还剩下边,证明存在环,sort失败。

1 bool sort(list
> &graph, int n, vector
&ans) { 2 vector
prev(n, 0); 3 for (auto it = graph.begin(); it != graph.end(); it++) { 4 prev[it->second]++; 5 } 6 7 queue
q; 8 for (int i = 0; i < n; ++i) { 9 if (prev[i] == 0) q.push(i);10 }11 12 while (!q.empty()) {13 int top = q.front();14 q.pop();15 ans.push_back(top);16 17 for (auto it = graph.begin(); it != graph.end(); ) {18 if (it->first == top) {19 prev[it->second]--;20 if (prev[it->second] == 0) q.push(it->second);21 it = graph.erase(it);22 } else {23 it++;24 }25 }26 }27 28 return graph.empty();29 }

 

转载于:https://www.cnblogs.com/linyx/p/4007773.html

你可能感兴趣的文章
vue父子组件生命周期函数执行顺序
查看>>
访问服务器老返回一个值的原因
查看>>
二分图匹配入门题
查看>>
面向基础 c#小复习
查看>>
Quartz2D(自定义UIImageView控件)
查看>>
P1169 [ZJOI2007]棋盘制作
查看>>
webService-AXis2
查看>>
android Fragment的数据传递
查看>>
python 异常处理
查看>>
C# 打开网络文件(UNC)
查看>>
Deep Learning(深度学习)学习笔记整理系列之(八)
查看>>
时间序列分析之一次指数平滑法
查看>>
电子商务安全协议 SSL SET的探究
查看>>
Python+OpenCV图像处理(十一)—— 图像金字塔
查看>>
JPEG最优压缩参数试验【光影魔术手VS Image Optimizer】
查看>>
git 命令总结
查看>>
MySQL常用操作
查看>>
WSN无限传感网络
查看>>
PHP中Header使用的HTTP协议及常用方法
查看>>
c#设计模式系列:模板方法模式(Template Method Pattern)
查看>>