24

接続したいノードのリストから始めて、networkxで完全に接続されたサブグラフを生成する必要があります。基本的に、関数に渡すリスト内のすべてのノードがすべて相互に接続されるようにします。

これを達成するための組み込み関数があるのだろうか(私は見つけていない)?または、何らかのアルゴリズムを考えるべきですか?

どうもありがとうございました。

4

3 に答える 3

17

これを行うメソッドはわかりませんが、networkx の complete_graph() メソッドを簡単に模倣して、わずかに変更することができます (ほぼビルトインのように):

import networkx
import itertools

def complete_graph_from_list(L, create_using=None):
    G = networkx.empty_graph(len(L),create_using)
    if len(L)>1:
        if G.is_directed():
            edges = itertools.permutations(L,2)
        else:
            edges = itertools.combinations(L,2)
        G.add_edges_from(edges)
    return G

S = complete_graph_from_list(["a", "b", "c", "d"])
print S.edges()
于 2012-05-18T11:09:49.807 に答える
12

完全に接続された (完全な) グラフを作成する関数 nameley がありcomplete_graphます。

import networkx as nx
g = nx.complete_graph(10)

整数の引数 (グラフ内のノードの数) を取るため、ノード ラベルを制御することはできません。私はそれを自動的に行うための関数を見つけていませんが、itertoolsそれは十分に簡単です:

from itertools import combinations

nodes = ['A', 'B', 'C', 'D', 'E']
edges = combinations(nodes, 2)
g = nx.Graph()
g.add_nodes_from(nodes)
g.add_edges_from(edges)

combinations(nodes, 2)nodesグラフのエッジとして機能するすべてのペアの組み合わせで 2 要素のタプルを作成します。

ただし、このソリューションは無向グラフに対してのみ有効です。より一般的なアプローチについては、zubinmehta のソリューションをご覧ください。

于 2012-05-18T11:13:37.583 に答える