在graphviz中生成邻接矩阵

时间:2017-09-27 22:22:41

标签: graphviz dot adjacency-matrix

我想知道是否可以使用graphviz生成邻接矩阵的图像。例如,从这个文件:

digraph { 
    A -> B; 
    B -> C; 
    A -> C; 
    D -> C; 
    E -> C; 
    E -> A; 
}

结果应该是这样的:

enter image description here

如果不可能,我还可以使用其他软件吗?

1 个答案:

答案 0 :(得分:1)

以下是一些想法:

我不知道允许graphviz打印矩阵的功能,但是,如果输入的graphviz代码相对干净(没有属性或奇怪的节点),我不知道它会如何难以编写一个简单的解析器来产生所需的输出。

你可以做一些简单的事情,比如下面的例子(python):

import pprint
# Example input file with "digraph g {" elided for simplicity:
s = """A -> B; 
    B -> C; 
    A -> C; 
    D -> C; 
    E -> C; 
    E -> A; """
lines = s.split("\n")
all_edges = []
pairs = []
for line in lines:
    edge = line.replace(";", "").replace(" ", "").split("->")
    if len(edge) == 2:
        all_edges.append(edge[0])
        all_edges.append(edge[1])
        pairs.append(edge)

unique_edges = set(all_edges)

matrix = {origin: {dest: 0 for dest in all_edges} for origin in all_edges}
for p in pairs:
    matrix[p[0]][p[1]] += 1
pprint.pprint(matrix)

完成所有操作后,这就是输出的样子,您可以编写更多代码来输出html或您选择的任何表格格式:

"""
Output:
{'A': {'A': 0, 'B': 1, 'C': 1, 'D': 0, 'E': 0},
 'B': {'A': 0, 'B': 0, 'C': 1, 'D': 0, 'E': 0},
 'C': {'A': 0, 'B': 0, 'C': 0, 'D': 0, 'E': 0},
 'D': {'A': 0, 'B': 0, 'C': 1, 'D': 0, 'E': 0},
 'E': {'A': 1, 'B': 0, 'C': 1, 'D': 0, 'E': 0}}
 """

我希望这有帮助!