Представление сети в Python - PullRequest
4 голосов
/ 07 июня 2011

У меня есть такие вершины, как 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

Я хочу связать каждую вершину в первом столбце с соответствующей вершиной ввторой столбец ребром.Таким образом, a с a представляет цикл.b с d в порядке.e, c и n они имеют одну и ту же вершину f.Вместо того, чтобы сказать e с f, c с f и n с f, мы можем сказать e, c и n с f.

Ответы [ 2 ]

5 голосов
/ 07 июня 2011

См .: 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 ]

EDIT:

Хорошо, похоже, вы просто хотите, чтобы функция строила график из заданных вами входных данных?

Примерно так:

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

Если вам нужна помощь в разборе столбчатых данных в список из двух кортежей, тогда это совсем другой вопрос

0 голосов
/ 07 июня 2011

Общая альтернатива ответу @ kurosch (список смежности) называется матрицей смежности.Это просто матрица, представляющая каждое возможное ребро, где 1 указывает на наличие ребра, 0 - нет.

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