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