在获取鼠尾草中有向图的入射矩阵时,如何指定顶点顺序和边沿顺序?

时间:2019-03-09 02:36:01

标签: sage

我们可以使用incidence_matrix(oriented=None, sparse=True, vertices=None) in SageMath方法获得有向图的关联矩阵。

  

每一行都是一个顶点,每一列都是一条边。顶点按通过方法vertices()获得的顺序进行排序,但给定参数为vertices时,其顶点和通过方法edge_iterator()获得的边缘除外。

我的问题是如何指定顶点顺序边顺序?


例如,g是具有10条边的加权有向图:

edges = [('s', 'x', 3), ('s', 'y', 5),
         ('x', 'y', 2), ('x', 'z', 6),
         ('y', 'x', 1), ('y', 'z', 4), ('y', 't', 6),
         ('z', 't', 2),
         ('t', 's', 3), ('t', 'z', 7)]

g = DiGraph(edges)

我想排列入射矩阵,以使顶点(从上到下)按s, x, y, z, t排序,边缘按edges上的顺序(从左向右)排序(即,按字母顺序s, x, y, z, t列出边缘。

1 个答案:

答案 0 :(得分:1)

快速浏览g.edge_iterator??建议的代码(您可以通过执行edge_iterator()获得

  

返回的迭代器在任何顶点入射的边缘上
  在参数“顶点”中给出。

if oriented:
    for e, (i, j) in enumerate(self.edge_iterator(labels=False)):
        if i != j:
            m[verts[i],e] = -1
            m[verts[j],e] = +1
else:
    for e, (i, j) in enumerate(self.edge_iterator(labels=False)):
        m[verts[i],e] += 1
        m[verts[j],e] += 1

告诉我,可能需要修改一点代码才能更改顺序。

这似乎是一个合理的请求,要求可自定义,因此我为此打开了Sage Trac ticket 27513