问题描述
所以我要做的是创建一个函数来检查图是否为有向无环图 (DAG)。
所以我得到顶点和邻接列表只是为了开始我的代码。
问题是我不允许使用堆栈(来自线性数据结构)、类,也不允许使用其他 Python 库/包,只允许使用纯 Python。 (所以不允许 networkx/matplotlib)
我知道有向无环图至少有 1 个拓扑排序,但我不确定如何编码。现在,我目前的想法是使用递归 DFS 和拓扑排序,但我不确定(再次)是否将这些组合在一起,或者我是否需要单独的函数。
解决方法
也许这有效:
对于所有节点中的 nodeY:
使用从当前 nodeY 开始的 Breadth-first search 算法。 (In Python)
创建一个 set()
并添加 nodeY。
在您访问的每个 nodeX 上,检查当前 nodeX 是否已经在集合中。
如果是,那么图形是循环的,算法完成。如果不是,则将当前 nodeX 添加到集合中。
如果您通过广度优先搜索访问了所有可达节点,则继续将下一个节点作为 nodeY 作为算法的起点。
如果没有下一个nodeY,则算法结束。 -> 非循环