拓扑排序

变量

  • int n\texttt{int n}:有向无环图的节点数目。
  • int deg[i]\texttt{int deg[i]}:节点 ii 的入度,应在建边时求出。
  • int cnt\texttt{int cnt}:有向无环图的排序后的节点数目,若不等于 nn 则该图不是有向无环图。
  • int ans[i]\texttt{int ans[i]}:排序后的第 ii 个点的编号。

函数

  • void topsort()\texttt{void topsort()}:进行拓扑排序。

代码

int n,deg[N],cnt,ans[N];
void topsort(){
	queue<int>q;
	for(int i=1;i<=n;i++)
		if(!deg[i])
		    q.push(i);
	while(q.size()){
		int x=q.front();
		   q.pop();
		ans[++cnt]=x;
		for(int i=head[x];i;i=nxt[i]){
			int y=ver[i];
			if(--deg[y]==0)
			    q.push(y);
		}
	}
}
posted @ 2022-08-26 22:46  luckydrawbox  阅读(12)  评论(0)    收藏  举报  来源