DAG拓扑排序
1|0DAG拓扑排序
1|1引入
小学奥数类型题。
沏茶过程
(烧水壶) 到 (接水) 到 (烧水 洗茶杯 找茶叶)(并行) 到 (沏茶)
即有先后顺序的流程,且必须所有步骤都能执行。
1|2概述
- 拓扑排序是对DAG(有向无环图)的顶点进行的一种线性排序,排序序列中每个顶点都会且仅会出现一次,且对于所有有向边
,排序完后 都在 的前面。 - 如果图中存在环,就不能进行拓扑排序。
- 一个有向无环图可能有多种排序结果。
- 对于
个顶点的有向无环图:- 最少存在
种合法的拓扑序列。- 即该图为一条直线。
- 最多存在
钟合法的拓扑序列。- 即该图为散点,无边。
- 最少存在
- 对于
1|3流程
- 在拓扑排序中,用
记录到目前为止的拓扑序列,用集合 记录所有不在 中入度为 的顶点。 - 步骤执行
- 首先遍历整张图上的顶点,如果一个顶点入度为
,将它加入 。 - 当
不为空时:- 在
中任取一个顶点 ,将 加入到 的队尾,并把 从 中删去。 - 遍历从
出发的边 ,删除。如果 的入度变为 ,则将其加入 中。
- 在
- 循环结束时:
- 如果所有点都加入了
,那么我们就找到了一个合法的拓扑序列。 - 如果有点不在
中,证明该图有环。
- 如果所有点都加入了
- 首先遍历整张图上的顶点,如果一个顶点入度为
用同一个队列维护。- 时间复杂度
1|4代码
-
STL
int main()
{
cin >> n >> m;
for (int _ = 0, x, y; _ < m; _++)
{
cin >> x >> y;
add_edge(x, y);
d[y]++;
}
}
```
- 手写
1|5例题
-
- 利用拓扑排序思想来记忆化
dfs
。
- 利用拓扑排序思想来记忆化
-
- 体会拓扑排序的作用
-
- 建构模型,形成图之后再拓扑。
-
- 对拓扑排序判断无解,判断最长拓扑链长度的方式的考察
__EOF__

本文作者:Kdlyh
本文链接:https://www.cnblogs.com/kdlyh/p/17864601.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/kdlyh/p/17864601.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下