graphviz - 在graphviz中生成邻接矩阵

标签 graphviz dot adjacency-matrix

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

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

结果应该是这样的:

enter image description here

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

最佳答案

这里有一些想法:

我不知道允许 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}}
 """

我希望这有帮助!

关于graphviz - 在graphviz中生成邻接矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46458128/

相关文章:

graph - 将 GraphViz/Dot 转换为 Powerpoint Graph

c++ - 如何使用 doxygen 从 C++ 源代码创建 UML 类图

graphviz - DOT - 如何减少连接两个节点的线

graphviz - 我可以使用点自动适应 Graphviz 节点的宽度吗?

java - 计算二维数组中相邻元素的程序给出不一致的结果

data-structures - 除了邻接表或邻接矩阵之外,还有其他数据结构可以表示图吗?

graphviz - 让 GraphViz 消除相同的重复边

graphviz - 改变点的边缘方向

dot - 如何在不引入重叠的情况下使 DOT/neato 图更紧凑?

python - 将邻接矩阵转换为 csv 文件