gpt4 book ai didi

graphviz - Graphviz .dot节点排序

转载 作者:行者123 更新时间:2023-12-03 10:01:05 30 4
gpt4 key购买 nike

我正在构建一个epsilon NFA,以使用规范构造来识别正则表达式。我正在使用子图对正则表达式的各个部分进行分组。 *运算符给我特别麻烦,因为dot决定移动节点的顺序。我尝试添加边缘权重以强制使特定边缘变短,以使边缘的顺序保持一致,但这似乎不起作用。

我想做的是强制将子图中的节点按特定顺序放置,以便将输出图识别为特定类型的(众所周知的)构造。在下面的示例中,我希望边3、4、5和6以此顺序放置,但是点将它们以6、3、4、5的顺序放置。

请注意,当前权重参数与权重参数完全没有区别。

我有以下

digraph G {
rankdir = LR;
node [shape = none];
0 [label = "start"];
node [shape = circle];
1 [label = "q1"];
2 [label = "q2"];
3 [label = "q3"];
4 [label = "q4"];
5 [label = "q5"];
node [shape = doublecircle];
6 [label = "q6"];
subgraph re1 {
rank = same;
edge[label = "0"];
1 -> 2;
};
subgraph re2 {
rank = same;
edge[label = "ε"];
3 -> 4 [weight = 10];
edge[label = "1"];
4 -> 5 [weight = 10];
edge[label = "ε"];
5 -> 6 [weight = 10];
5 -> 4 [weight = 1];
6 -> 3 [weight = 1];
};
edge[color=black];
0 -> 1
edge[label = "ε"];
2 -> 3;
}

最佳答案

这是我编写该图的方式:

  • 首先,对我来说,这是一个从上到下而不是从左到右的图,因此我删除了rankdir=LR并仅为节点0/1和节点2/3添加了rank=same
  • 我删除了所有权重
  • 最重要的是,我在与图形方向相反的边缘上添加了constraint=false-一个从节点4到节点5,一个从节点6到节点3。

  • 来源:
    digraph G {
    0 [label = "start", shape = none];
    node [shape = circle];
    1 [label = "q1"];
    2 [label = "q2"];
    3 [label = "q3"];
    4 [label = "q4"];
    5 [label = "q5"];
    6 [label = "q6", shape = doublecircle];

    {rank = same; 0 -> 1; }
    1 -> 2 [label = "0"];
    {rank = same; 2 -> 3 [label = "ε"]; }
    4 -> 5 [label = "1"];
    edge [label = "ε"];
    3 -> 4;
    5 -> 6;
    5 -> 4 [constraint = false];
    6 -> 3 [constraint = false];
    }

    结果如下:

    现在,如果需要,您可以保留 rankdir=LR,只需采用发布的标记,删除权重,然后将 constraint=false添加到与我相同的边缘,它也可以工作。

    关于graphviz - Graphviz .dot节点排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7627904/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com