У меня есть график, который имеет следующую структуру:
{'a':['b','c','d','e'],
'b':['d'],
'c':['d','e'],
'd':[],
'e':[],
'f':['i','j','c','e','d'],
'i':['c','e','d']
'j':['e']}
Этот список не является списком смежности, поскольку он содержит всех потомков узла. Не прямые дети.
график должен выглядеть так:
a f
/ \ / \
b \ i j
\ \ / /
\ c /
\ / \ /
d e
Таким образом, список смежности будет выглядеть так:
{'a':['b','c'],
'b':['d'],
'c':['d','e'],
'd':[],
'e':[],
'f':['i','j'],
'i':['c'],
'j':['e']}
Мне нужен алгоритм, чтобы сделать это. Алгоритм должен быть настолько быстрым, насколько это возможно, используя минимальное дополнительное пространство. Кто-нибудь, кто может это решить?
Спасибо!
i
изa
? - person ooga   schedule 17.04.2014My attempts at this have been expensive in terms of space and time
. Покажите нам свои попытки, и мы постараемся помочь вам их исправить. - person inspectorG4dget   schedule 17.04.2014