python:从带括号的边创建图形节点
我正在尝试从如下输入创建一个图形:python:从带括号的边创建图形节点,python,graph,nodes,edges,Python,Graph,Nodes,Edges,我正在尝试从如下输入创建一个图形: (1 2) (2 3) (3 4) (4 1) 上面的表示是空格分隔的,每个括号内的参数表示两个节点之间的边。我不确定哪种矩阵表示法更容易使用。。矩阵邻接或链表邻接 关于如何解析这些输入有什么想法吗?例如,如何将其立即存储在矩阵中 提前谢谢 您可以这样解析它 points = re.findall("\((\d+) (\d+)\)","(1 2) (2 3) (3 4) (4 1) ") 在易用性方面,矩阵邻接更好,即使两个节点之间的边缘检测在O(1)时
(1 2) (2 3) (3 4) (4 1)
上面的表示是空格分隔的,每个括号内的参数表示两个节点之间的边。我不确定哪种矩阵表示法更容易使用。。矩阵邻接或链表邻接
关于如何解析这些输入有什么想法吗?例如,如何将其立即存储在矩阵中
提前谢谢 您可以这样解析它
points = re.findall("\((\d+) (\d+)\)","(1 2) (2 3) (3 4) (4 1) ")
在易用性方面,矩阵邻接更好,即使两个节点之间的边缘检测在O(1)时间内发生。如果您的网络是巨大而稀疏的,您可能希望避免浪费太多的空间,在矩阵邻接中放置零,那么您应该使用链表邻接。在您的例子中,因为它是一个小图形,所以没有多大关系。我建议构建一个字典,将节点映射到它所连接的一组节点。 这是假设您的边是单向的
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)
你想做什么。。。当然不仅仅是储存它。。。如果您只想存储它,那么当前格式有什么问题。。。如果你想以某种方式渲染它,看看点语言。。。它使图形再现变得简单。。。您可以使用
networkx
来保存图形,它已经构建了遍历功能in@JoranBeasley我想检查这个图是否是欧拉回路