1.有向无环图:

2.拓扑排序:


/*
1.设置vector的int类型 邻接表G
2.设置int类型 n,m,inDegree[maxn] 顶点数,入度
3.bool类型的 topu排序:
1.设置int类型的 num为0 表示拓扑排序的顶点数
2.设置队列q
3.for循环从0--n,将入度为0的点放到队列中
4.while循环队列不为空
1.设置int类型u,为队首元素
2.弹出
3.for循环,遍历结点u的后继结点
1.设置v为u的后继结点
2.v的入度--
3.如果入度减为0,则入队
4.清空u的所有边
5.拓扑排序顶点个数自增1
5.如果num为n,返回true,否则,返回false
*/
vector<int> G[maxn];
int n,m,inDegree[maxn];
bool tuopu()
{
int num=0;
queue<int> q;
for(int i=0; i<n; i++)
{
if(inDegree[i]==0)
q.push(i);
}
while(!q.empty())
{
int u=q.front();
q.pop();
for(int i=0; i<G[u].size(); i++)
{
int v=G[u][i];
inDegree[v]--;
if(inDegree[v]==0)
q.push(v);
}
G[u].clear();
num++;
}
if(num==n)
return true;
else
return false;
}

本文详细介绍了有向无环图的拓扑排序算法实现过程,包括使用邻接表表示图结构,通过队列进行节点入度管理和遍历,最终完成正确的拓扑排序,并给出源代码示例。

被折叠的 条评论
为什么被折叠?



