DAG在Python中的实现

DAG在Python中的实现,python,depth-first-search,directed-acyclic-graphs,topological-sort,Python,Depth First Search,Directed Acyclic Graphs,Topological Sort,在这里,我的方法是首先找到所有具有零度的顶点 然后找到每个顶点的in度 遍历时,可以推断每个顶点的阶数。如果in度为零,则执行递归 这里,self.indegree和self.graph是字典表示法。 我不知道我解决问题的方式是否最优,但我只想用这种方式解决问题。 还有,如果有即兴创作,我会很受欢迎的 我也不知道为什么我会犯这个错误 -=:“list”和“int”的操作数类型不受支持 有一个可读的实现,但是它有很多错误 DAG代码要完整得多,但很难理解 如果您要在生产代码中实现DAG,可能最好依

在这里,我的方法是首先找到所有具有零度的顶点 然后找到每个顶点的in度 遍历时,可以推断每个顶点的阶数。如果in度为零,则执行递归 这里,self.indegree和self.graph是字典表示法。 我不知道我解决问题的方式是否最优,但我只想用这种方式解决问题。 还有,如果有即兴创作,我会很受欢迎的

我也不知道为什么我会犯这个错误 -=:“list”和“int”的操作数类型不受支持

有一个可读的实现,但是它有很多错误

DAG代码要完整得多,但很难理解


如果您要在生产代码中实现DAG,可能最好依赖networkx。如果您想学习如何在Python中实现DAG,请查看networkx源代码。

首先,您的实现看起来像是类的一部分,但不完整。其次,请尝试打印(键入(self.indegree[neighbor])。根据您的回溯,这应该是一个列表。尝试向列表中添加整数将导致该错误。那么,您希望这行代码做什么>问题在于
self.indegree[nexter]
返回一个列表是的,这是一个类型错误,我做了一个更正,但在同一行,我得到了一个keyError 5。我希望这行代码将邻居的独立度降低1。在初始级别,我选择一个顶点进行DFS遍历。当图形遍历时,它会将下一个邻居的独立度降低1,如果邻居的阶数为零,这将是一个递归
def get_Indegree_Of_Vertices(self):
    for ele in self.graph.keys():
        self.indegree[ele] = 0
        for i in self.graph.values():
            self.indegree[ele] += i.count(ele)
    return self.indegree

def DAG(self, root):
    # Queue is where I store all the nodes that have in-degree of zero
    queue = deque([root])
    x = queue.popleft()
    print(x)
    for neighbour in self.graph[x]:
        self.indegree[neighbour] -= 1 
        queue.append(neighbour)
        if self.indegree[neighbour] == 0:
            self.DAG(neighbour)