Получить все листья в списке смежности - PullRequest
1 голос
/ 01 февраля 2020

Учитывая структуру, подобную следующей:

graph = {

    # c1 is root node, graph is directed, c1 is source/root node
    'c1': ['c2', 'c3'],
    'c2': ['c4']

}

      c1
      /\
     /  \ 
    c2   c3
   /
  /
c4

Каким будет алгоритм общего назначения, чтобы найти все листья на графе? Моя первая мысль была:

# values in the 'from' section, that don't have a 'to' entry
set(itertools.chain(*graph.values())) - set(graph.keys())
# {'c3', 'c4'}

Это правильный способ сделать это? Каковы будут другие подходы, чтобы определить, является ли лист листом или нет?

1 Ответ

0 голосов
/ 02 февраля 2020

Вы можете упростить свой кусок, чтобы сделать его более эффективным:

leaves = set()
leaves.update(*graph.values())
leaves -= graph.keys()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...