专栏文章

【模板】拓扑排序

算法·理论参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minis34e
此快照首次捕获于
2025/12/02 03:05
3 个月前
此快照最后确认于
2025/12/02 03:05
3 个月前
查看原文

vector版

CPP
void topsort(int n,vector<int> *g,int *in,int *ans,bool icd)
{
	queue<int,list<int> > q;int len = 0,t;
	if (!icd) for (int i = 1;i <= n;i ++) for (auto j:g[i]) in[j] ++;
	for (int i = 1;i <= n;i ++) if (!in[i]) q.push(i);
	while (!q.empty())
	{
		t = q.front(),q.pop(),ans[++len] = t;
		for (auto i:g[t]) if (--in[i] == 0) q.push(i);
	}
}

链式前向星版

前置知识:链式前向星
CPP
void topsort(int n,LFS g,int *in,int *ans,bool icd)
{
	queue<int,list<int> > q;int len = 0,t;
	if (!icd) for (int i = 1;i <= n;i ++) for (int j = g.head[i];j;j = g.edge[j].ne) in[g.edge[j].to] ++;
	for (int i = 1;i <= n;i ++) if (!in[i]) q.push(i);
	while (!q.empty())
	{
		t = q.front(),q.pop(),ans[++len] = t;
		for (int i = g.head[t],v;i;i = g.edge[i].ne) if (--in[v = g.edge[i].to] == 0) q.push(v);
	}
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...