用Python代表网络

时间:2011-06-06 21:55:57

标签: python graph-theory

我有一个顶点,例如dic = {'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4, 'f': 5, 'n':6, 'm':7, 'g':8},我有两列,如下表示顶点之间的关系:

a a
b d
e f
c f
n f
m g

我想将第一列中的每个顶点与第二列中相应的顶点相关联。因此aa代表一个循环。 b d很好。 ecn他们共享相同的顶点f。而是efcfnfe,{{1} {}}和cn

2 个答案:

答案 0 :(得分:5)

请参阅:https://www.python.org/doc/essays/graphs/

graph = {
    'a' : [ 'a' ],
    'b' : [ 'd' ],
    'c' : [ 'f' ],
    'd' : [],
    'e' : [ 'f' ],
    'f' : [],
    'g' : [],
    'm' : [ 'g' ],
    'n' : [ 'f' ]
}

print [ vertex for vertex, edges in graph.items() if 'f' in edges ]

编辑:

好吧,听起来你只想要一个函数来从你给定的输入构建图形?

这样的事情:

def build_graph( vertices, edges ):
    graph = dict( (v, list()) for v in vertices.keys() )
    for a, b in edges:
        graph[ a ].append( b )
    return graph

如果您需要帮助将列式数据解析为两元组列表,那么这完全是另一个问题

答案 1 :(得分:0)

@ kurosch的答案(邻接列表)的一般替代方案称为邻接矩阵。它只是一个表示每个可能边缘的矩阵,其中1表示存在边缘,0表示不存在边缘。

adj = [[0 for x in range(len(dic)] for x in range(len(dic))]
adj[dic['a'][dic['b']] = 1
etc..