Как исключение KeyError: 3 при попытке выполнить следующие действия, чтобы найти топологическую сортировку:Получение KeyError: 3
def dfs_topsort(graph): # recursive dfs with
L = [] # additional list for order of nodes
color = { u : "white" for u in graph }
found_cycle = [False]
for u in graph:
if color[u] == "white":
dfs_visited(graph, u, color, L, found_cycle)
if found_cycle[0]:
break
if found_cycle[0]: # if there is a cycle,
L = [] # then return an empty list
L.reverse() # reverse the list
return L # L contains the topological sort
def dfs_visited(graph, u, color, L, found_cycle):
if found_cycle[0]:
return
color[u] = "gray"
for v in graph[u]:
if color[v] == "gray":
found_cycle[0] = True
return
if color[v] == "white":
dfs_visited(graph, v, color, L, found_cycle)
color[u] = "black" # when we're done with u,
L.append(u)
graph_tasks = {1: [2,11],
2: [3],
11: [12],
12: [13]
}
order = dfs_topsort(graph_tasks)
for task in order:
print(task)
Я получаю KeyError: 3 для приведенного выше примера. Почему это так? Как это можно исправить?
Но когда я делаю то, что вы предлагаете, dfs_topsort возвращает null. То, что я делаю, работает для других примеров, но не для этого. Как это исправить? – Angad
Думаю, вам нужно изменить ту же логику в функции 'dfs_topsort': изменить' для u в графе: 'to' для u в graph.iterkeys(): '. Кроме того, он возвращает 'None' не' null', и, согласно вашим комментариям кода, «если есть цикл, а затем возвращает пустой список», значит, это не должно быть True, и оно возвращает «None»? – davedwards
Нет, если я использую этот пример: graph = { 1: [2, 3], 2: [4, 5, 6], 3: [4,6], 4: [5,6], 5: [6], 6: [] }, то, что я делал, дает правильный результат. Даже после изменения его на graph.iterkey() в dfs_topsort он ничего не возвращает. – Angad