0
중첩 for 루프에서 내 머리를 감싸는 데 문제가 있습니다. 위키에 Kahn의 알고리즘을 따르고 있습니다 : Kahn's. outgoingEdge가 각 endArray 요소 (m)에 들어오는 가장자리를 가지고 있는지 테스트하는 방법을 이해할 수 없습니다. 여기 Topological sort (Kahn 's algorithm) trouble
는 내가 지금까지 무엇을 가지고 : 여기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
내 알고리즘을 시각화하는 사진입니다. 그래프가 인접 목록 형태입니다.
아, 내가 얘기를 깜빡 했네요, 수없이 빈 키. –
@JeffreyPhung 빈 키가 허용되지 않는다는 것은 무엇을 의미합니까? 나가는 가장자리가 없기 때문에 '3'은 인접 목록에 없어야합니다. – niemmi
주어진 내 인접 목록에 3 개가 포함되지 않았습니다. 그래서 당신의 논리에서, 예외적 인 오류가있을 것입니다. 이것이 제가 제 방식대로하려고 한 이유입니다. 당신 길에서, 나는 모든 이웃에 대한 또 다른 인접 목록을 다시 만들어야 할 것 같아요? –