如何使用 graphviz、dot 使这个图成为非循环图?
How do I make this graph acyclic, with graphviz, dot?
这里是 DOT
/GraphViz 的第一次用户。我有下图
digraph G {
rankdir=LR;
"START" -> "A" -> "B" -> "A" -> "C" -> "A" -> "END"
"START" -> "A" -> "C" -> "A" -> "B" -> "A" -> "END"
}
渲染成这样
而我希望它像这样呈现
如何在 DOT
中表达?
在 Graphviz 中,您不能有超过一个具有相同 ID 的状态。但是,您可以创建一个图表,其中各州的 ID 不同但标签相同。
为了构建你想要的图表,我会尝试这样的事情:
digraph G{
START [label="START"];
A1 [label="A"];
A2 [label="A"];
A3 [label="A"];
B1 [label="B"];
B2 [label="B"];
C1 [label="C"];
C2 [label="C"];
END [label="END"]
START->A1
A1->B1
A1->C1
B1->A2
C1->A2
A2->B2
A2->C2
B2->A3
C2->A3
A3->END
}
即定义了不同的状态以相同的名称(标签)显示。在这里你可以看到结果:
这与@rakwaht 的建议完全相同,您已经接受了,只是写得更简洁——我不认为这是一场噩梦:
digraph G{
START [label="START"];
A1, A2, A3 [label="A"];
B1, B2 [label="B"];
C1, C2 [label="C"];
END [label="END"];
START-> A1 -> { B1 C1 } -> A2 -> { B2 C2 } -> A3 -> END
}
这里是 DOT
/GraphViz 的第一次用户。我有下图
digraph G {
rankdir=LR;
"START" -> "A" -> "B" -> "A" -> "C" -> "A" -> "END"
"START" -> "A" -> "C" -> "A" -> "B" -> "A" -> "END"
}
渲染成这样
而我希望它像这样呈现
如何在 DOT
中表达?
在 Graphviz 中,您不能有超过一个具有相同 ID 的状态。但是,您可以创建一个图表,其中各州的 ID 不同但标签相同。
为了构建你想要的图表,我会尝试这样的事情:
digraph G{
START [label="START"];
A1 [label="A"];
A2 [label="A"];
A3 [label="A"];
B1 [label="B"];
B2 [label="B"];
C1 [label="C"];
C2 [label="C"];
END [label="END"]
START->A1
A1->B1
A1->C1
B1->A2
C1->A2
A2->B2
A2->C2
B2->A3
C2->A3
A3->END
}
即定义了不同的状态以相同的名称(标签)显示。在这里你可以看到结果:
这与@rakwaht 的建议完全相同,您已经接受了,只是写得更简洁——我不认为这是一场噩梦:
digraph G{
START [label="START"];
A1, A2, A3 [label="A"];
B1, B2 [label="B"];
C1, C2 [label="C"];
END [label="END"];
START-> A1 -> { B1 C1 } -> A2 -> { B2 C2 } -> A3 -> END
}