Living-Dream 系列笔记 第35期
拓扑排序(\(\texttt{toplogical sort}\)):
在有向无环图(\(\texttt{DAG}\))中,将 \(n\) 个节点整理成一组排列,使得对于每一条边 \(u \to v\),\(u\) 在排列中的位置总是在 \(v\) 之前,我们称这样的排列为原图的拓扑序,找出一张图的拓扑序的过程则被称为拓扑排序。
拓扑排序不一定唯一。
实现:
-
统计所有节点的入度 \(in_u\),并将 \(in_u=0\) 的节点丢入队列;
-
循环输出队首弹出,并将其指向的所有节点的入度 \(-1\),若入度为 \(0\) 了则继续丢入队列;
-
最后,若队列弹出的节点数不足 \(n\) 个,则原图无拓扑序(因为有环)。
时间复杂度是 \(O(n+m)\) 的。
void topo_sort(){ queue<int> q; for(int i=1;i<=n;i++) if(!in[i]) q.push(i); while(!q.empty()){ int cur=q.front(); cout<<cur<<'\n',q.pop(); for(auto i:G[cur]){ in[i]--; if(!in[i]) q.push(i); } } }
没有例题(悲)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】