Graphviz.point de noeud de commande
je construis un epsilon NFA pour reconnaître une expression régulière en utilisant la construction canonique. J'utilise des subgraphes pour regrouper diverses parties de l'expression régulière. L'opérateur * me pose un problème particulier puisque dot a décidé de déplacer l'ordre des noeuds. J'ai essayé d'ajouter des poids de bord pour forcer des bords particuliers à être court pour garder l'ordre des bords dans la ligne, mais cela ne semble pas fonctionner.
Ce que je voudrais faire est de forcer le les noeuds d'un sous-paragraphe doivent être placés dans un ordre particulier de sorte que le graphique de sortie soit reconnaissable comme un type particulier de construction (bien connu). Dans l'exemple ci-dessous je voudrais bords 3, 4, 5 et 6 placés dans l'ordre, cependant, le point place dans l'ordre 6, 3, 4, 5. Tous les conseils sont appréciés.
noter que le paramètre de poids actuel ne produit aucune différence que pas de paramètre de poids du tout.
j'ai le texte suivant
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;
}
1 réponses
Voici comment j'écrirais ce graphique:
- tout d'abord, pour moi c'est un graphe qui va de haut en bas, pas de gauche à droite, donc j'ai enlevé le
rankdir=LR
et ajoutérank=same
seulement pour les noeuds 0/1 et les noeuds 2/3. - j'ai enlevé tous les poids
- le plus important, j'ai ajouté
constraint=false
aux bords allant contre la direction du graphe - celui allant du noeud 4 au noeud 5, et celui de noeud 6 à noeud 3.
ici la 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];
}
et voici le résultat:
maintenant si vous voulez, vous pouvez garder rankdir=LR
, juste prendre le markup que vous avez posté, enlever les poids et ajouter constraint=false
aux mêmes bords que je l'ai fait, cela fonctionne, aussi.