有向无环图的判定及拓扑排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有向无环图的判定及拓扑排序相关的知识,希望对你有一定的参考价值。

1)输入给定有向图的顶点总数和所有顶点标志(每个顶点均用一个大写英文字母作为标志);
(2)输入图中弧的总数,并利用循环依次输入各条弧,建立该有向图的邻接表存储结构;
(3)从图中选取一个入度为零的顶点(如果存在多个顶点入度为零,则任选其中之一即可),标记该顶点并删除以该顶点为弧尾的所有弧,删除每条弧的同时更新相应弧头的入度值;
(4)不断重复步骤(3),直到找不到入度为零的顶点或者已经删除所有弧为止;
(5)如果还有顶点尚未标记(尚未标记顶点的入度肯定均不为零),或者还有弧结点未被删除,则可判定该图中存在环;如果可以将图中所有顶点全部标记,则标记顶点的顺序即为该有向无环图的拓扑序列;
(6)给出该图有无环的判定结果。若为有向无环图,则给出其拓扑序列;若图中存在环,则列出环中的所有顶点;

 测试时分别输入存在环和不存在环的两个图,输出是否存在环的判定结果,并给出相应的拓扑序列或者列出环中的所有顶点。

请用C语言。谢谢了。

参考技术A 五分您打发谁呢?数据结构要好好学啊

有向无环图

定义

边有向,无环。

英文名叫 Directed Acyclic Graph,缩写是 DAG。

性质

  • 拓扑排序 的图,一定是有向无环图;

    如果有环,那么环上的任意两个节点在任意序列中都不满足条件了。

  • 有向无环图,一定能拓扑排序;

    (归纳法)假设节点数不超过 (k) 的 有向无环图都能拓扑排序,那么对于节点数等于 (k) 的,考虑执行拓扑排序第一步之后的情形即可。

判定

如何判定一个图是否是有向无环图呢?

检验它是否可以进行 拓扑排序 即可。

当然也有另外的方法,可以对图进行一遍 DFS ,在得到的 DFS 树上看看有没有连向祖先的非树边(返祖边)。如果有的话,那就有环了。

以上是关于有向无环图的判定及拓扑排序的主要内容,如果未能解决你的问题,请参考以下文章

一个有向无环图的拓扑排序序列是否唯一的

一个有向无环图的拓扑排序序列是唯一的么

如何利用拓扑排序將一个有向无环图的邻接短阵中的非零元素集中到对角线以上?

有向无环图的哈希值

图的拓扑排序是否不唯一的?

拓扑排序讲解