拓扑排序(topological-sort)

拓扑排序

模板

cpp 复制代码
queue<int> q;
vector<int> v;
for(int i=1;i<=n;++i)
    if(!in[i]) q.push(i);
while(q.size()){
    int x=q.front();
    q.pop();
    v.pb(x); //拓扑序列
    for(int i=head[x];i;i=ne[i]){
        int y=to[i];
        in[y]--;
        if(!in[y]) q.push(y);
    }
}

1.判断是否成环

并查集判 无向图的环,拓扑排序判 有向图的环。

如果拓扑序列点的数量不等于总点数,那么有环。

2.在遍历树时,数出上头需要当前点几次

cpp 复制代码
queue<int> q;
for(int i=1;i<=n;++i)
    if(!in[i]) q.push(i);
vis[n]=1;
while(q.size()){
    int x=q.front();
    q.pop();
    for(int i=head[x];i;i=ne[i]){
        int y=to[i];
        vis[y]+=vis[x];
        in[y]--;
        if(!in[y]) q.push(y);
    }
}
相关推荐
池塘的蜗牛5 小时前
mmse-based-OFDM-signal-processing(2)
算法
Kris_LinSD5 小时前
算法小实验——分治算法快速排序问题实验(含报告)
c语言·算法
Super小白&5 小时前
十大经典排序算法详解(附C语言实现+复杂度分析)
c语言·算法·排序算法
Eloudy5 小时前
Birkhoff 多胞形,双随机矩阵的几何世界
算法
2503_946971865 小时前
【SystemDesign/HA】2025年度高可用分布式仿真节点与预测模型容灾演练配置 (Disaster Recovery Config)
大数据·分布式·算法·系统架构·数据集
GrowingYi5 小时前
算法基础技术栈
数据结构·算法
坐怀不乱杯魂5 小时前
Linux - 缓存利用率
linux·c++·缓存
炽烈小老头5 小时前
【 每天学习一点算法 2026/01/04】打家劫舍
学习·算法
leiming65 小时前
c++ for_each算法
开发语言·c++·算法
吴声子夜歌5 小时前
数据结构与算法——排序
数据结构·算法·排序算法