Graphviz .dot node ordering

前端 未结 1 1191
忘了有多久
忘了有多久 2021-01-31 16:45

I\'m building a epsilon NFA to recognize a regular expression using the canonical construction. I\'m using subgraphs to group various parts of the regular expression. The * oper

相关标签:
1条回答
  • 2021-01-31 17:26

    Here's how I'd write that graph:

    • First of all, to me this is a graph which goes from top to bottom, not left to right, therefore I removed the rankdir=LR and added rank=same only for nodes 0/1 and nodes 2/3.
    • I removed all the weights
    • Most importantly, I added constraint=false to the edges going against the direction of the graph - the one going from node 4 to node 5, and the one from node 6 to node 3.

    Here the source:

    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];
    }
    

    And here's the result:

    graphviz output

    Now if you want to, you could keep rankdir=LR, just take the markup you posted, remove the weights and add constraint=false to the same edges as I did, it works, too.

    0 讨论(0)
提交回复
热议问题