B3644 【模板】拓扑排序 / 家谱树 超级详细讲解

编程入门 行业动态 更新时间:2024-10-25 08:25:05

B3644 【模板】拓扑排序 / <a href=https://www.elefans.com/category/jswz/34/1713606.html style=家谱树 超级详细讲解"/>

B3644 【模板】拓扑排序 / 家谱树 超级详细讲解

#include<bits/stdc++.h>
using namespace std;
int n;const int N=111,M=1e6+1;//此处范围设定尤其注意区分
int q[N];//队列 从对头输出度为0的元素 队尾输入度为0元素
int deg[N];//以某点发出的边int e[M],ne[M],h[N],idx;//e 代表值 ne代表指向的下一个点 h相当于一个槽 放临接表 idx代表下一个可用的点void  add(int x,int y)
{e[idx]=y;ne[idx]=h[x];h[x]=idx++;
}//h里是上面的值 idx是他下面的链  void topsort()
{int hh=0,tt=0;for(int i=1;i<=n;i++)if(!deg[i]) q[tt++]=i;//入度为0的入队while(hh<=tt){int t=q[hh++];//取出在队头入度为0的元素for(int i=h[t];i;i=ne[i])//遍历每一个值下面的表{int j=e[i];if(--deg[j]==0)//将i->j的边删除{q[tt++]=j;//将0度入队}}}
}int main()
{cin>>n;int m;for(int i=1;i<=n;i++){while(cin>>m&&m)//不断读入 直到为0{add(i,m);//I->m的边deg[m]++;//边++}}topsort();for(int i=0;i<n;i++)cout<<q[i]<<" ";
}

更多推荐

B3644 【模板】拓扑排序 / 家谱树 超级详细讲解

本文发布于:2024-02-11 00:34:04,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1678188.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:家谱   拓扑   模板   详细

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!