python:从带括号的边创建图节点

时间:2014-05-10 19:39:32

标签: python graph nodes edges

我正在尝试从输入中创建一个图形,如下所示:

(1 2) (2 3) (3 4) (4 1) 

上面的表示是空格分隔的,每个带括号的参数表示两个节点之间的边。我不确定哪种矩阵表示更容易使用.. matrix-adjacencylinked list adjacency

有关如何解析此类输入的任何想法?以及如何将它立即存储在矩阵中?例如?

提前致谢!

3 个答案:

答案 0 :(得分:2)

就易用性而言,矩阵邻接是优选的,甚至两个节点之间的边缘检测也在O(1)时间内发生。如果您的网络庞大且稀疏,您可能希望避免浪费太多空间将零放在矩阵邻接中,那么您应该使用链接列表邻接。在你的情况下,因为它是一个小图,它并不重要。

答案 1 :(得分:0)

你可以像这样解析它

points = re.findall("\((\d+) (\d+)\)","(1 2) (2 3) (3 4) (4 1) ")

答案 2 :(得分:0)

我建议建立一个字典,将节点映射到它所连接的一组节点。 这假设你的边是单向的。

info = '(1 2) (2 3) (3 4) (4 1)'
info = info.replace('(','').replace(')','')
info = info.split(' ')
edges={};
for i in range(1,len(info)):
    if i%2 == 1:
        startnode = info[i-1]
        endnode = info[i]
        if startnode not in edges:
            edges[startnode] = set()
        edges[startnode].add(endnode)