Python - 如何在不使用堆栈和类的情况下检查有向无环图?

问题描述

所以我要做的是创建一个函数来检查图是否为有向无环图 (DAG)。

所以我得到顶点和邻接列表只是为了开始我的代码

问题是我不允许使用堆栈(来自线性数据结构)、类,也不允许使用其他 Python 库/包,只允许使用纯 Python。 (所以不允许 networkx/matplotlib)

我知道有向无环图至少有 1 个拓扑排序,但我不确定如何编码。现在,我目前的想法是使用递归 DFS 和拓扑排序,但我不确定(再次)是否将这些组合在一起,或者我是否需要单独的函数

解决方法

也许这有效:

对于所有节点中的 nodeY:

使用从当前 nodeY 开始的 Breadth-first search 算法。 (In Python)

创建一个 set() 并添加 nodeY。

在您访问的每个 nodeX 上,检查当前 nodeX 是否已经在集合中。

如果是,那么图形是循环的,算法完成。如果不是,则将当前 nodeX 添加到集合中。

如果您通过广度优先搜索访问了所有可达节点,则继续将下一个节点作为 nodeY 作为算法的起点。

如果没有下一个nodeY,则算法结束。 -> 非循环