在嵌套的for循环中,我很难把我的思想围绕在我的代码上。我在wiki上遵循Kahn的算法:Kahn's。我不知道如何测试outgoingEdge是否有每个endArray元素(m)的传入边。在
以下是我目前所掌握的情况:
def topOrdering(self, graph):
retList = []
candidates = set()
left = []
right = []
for key in graph:
left.append(key)
right.append(graph[key])
flattenedRight = [val for sublist in right for val in sublist]
for element in left:
if element not in flattenedRight:
#set of all nodes with no incoming edges
candidates.add(element)
candidates = sorted(candidates)
while len(candidates) != 0:
a = candidates.pop(0)
retList.append(a)
endArray = graph[a]
for outGoingEdge in endArray:
if outGoingEdge not in flattenedRight:
candidates.append(outGoingEdge)
#flattenedRight.remove(outGoingEdge)
del outGoingEdge
if not graph:
return "the input graph is not a DAG"
else:
return retList
您可以分别存储indegree(传入边的数目),并在每次从空集中移除顶点时减少计数。当count变为0时,将顶点添加到空集,以便稍后处理。以下是示例:
输出:
^{pr2}$相关问题 更多 >
编程相关推荐