NetworkX: Как вернуть Bool, если у узла есть преимущество? - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть список nx узлов, которые я пытаюсь подключить, и мне нужно утверждать, что родительский узел может рисовать только одно ребро, в то время как у ребенка может быть нарисовано много ребер. Чтобы помочь объяснить, ниже приведен мой отрендеренный файл точек. Я не хочу, чтобы верхний узел рисовал ребро для каждого экземпляра, где он найден. Просто следующий логический узел (надмножество) под ним, то есть (1,4) -> (1,4,8) и (1,4,8) -> (1,4,8,13):

enter image description here

Я думаю, смогу ли я убедиться, что любой узел может проходить через циклы for, только если у родителя (i) нет дочернего элемента (j), уже подключенного к это, моя идея должна работать. Любая помощь или сделать c ссылки будет принята с благодарностью.

Мой код:

for i in G.nodes:
    # Possible (if i does not have edge):
    for j in G.nodes:
        if i != j and set(i).issubset(set(j)):
            G.add_edge(i, j)

1 Ответ

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

Решено! для дальнейшего использования: используйте атрибуты networkx и узлы тегов. Затем можно создать родительское условие и включить или выключить его при рисовании ребра:

for i in G.nodes:
    G.nodes[i]['parent'] = False

for i in node_list:
    G.add_node(i, parent=False)
for i in G.nodes:
    if not G.nodes[i]['parent']:
        for j in G.nodes:
            if i != j and set(i).issubset(set(j)):
                G.add_edge(i, j)
                G.nodes[i]['parent'] = True

enter image description here

...