我想知道是否可以使用graphviz生成邻接矩阵的图像。例如,从这个文件:
digraph {
A -> B;
B -> C;
A -> C;
D -> C;
E -> C;
E -> A;
}
结果应该是这样的:
如果不可能,我还可以使用其他软件吗?
答案 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}}
"""
我希望这有帮助!