我正在尝试从输入中创建一个图形,如下所示:
(1 2) (2 3) (3 4) (4 1)
上面的表示是空格分隔的,每个带括号的参数表示两个节点之间的边。我不确定哪种矩阵表示更容易使用.. matrix-adjacency
或linked list adjacency
?
有关如何解析此类输入的任何想法?以及如何将它立即存储在矩阵中?例如?
提前致谢!
答案 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)