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

1 投票
3 回答
587 浏览
提问于 2025-04-18 06:08

我正在尝试从一个输入创建一个图,输入的格式如下:

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

上面的表示方式是用空格分开的,每个括号里的参数代表两个节点之间的连接。我不太确定哪种矩阵表示法更好用……是 邻接矩阵 还是 邻接链表

有没有什么想法可以帮助我解析这样的输入?比如,怎么把它直接存储到矩阵里?

提前谢谢大家!

3 个回答

0

你可以这样解析它

points = re.findall("\((\d+) (\d+)\)","(1 2) (2 3) (3 4) (4 1) ")
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)
2

从使用的方便性来看,矩阵邻接法更好,因为在两个节点之间检测边的时间是O(1),也就是非常快。如果你的网络很大而且稀疏,使用矩阵邻接法会浪费很多空间,因为里面会有很多零,这时候你就应该选择链表邻接法。对于你来说,因为图比较小,所以这两种方法差别不大。

撰写回答