سؤال

لدي عدد من الرسوم البيانية البسيطة نسبيا (تم إنشاؤها تلقائيا) بتنسيق Graphviz DOT. تظهر هذه المسار من خلال آلة حالة، ولكن DOT لها عادة مربكة قليلا في تحديد أن العقدتين يجب أن تكون على نفس الرتبة عندما أرغب في أن يكون الرسم البياني في أمر الدولة. لقد جربت الكثير من الإعدادات (بما في ذلك :n و :s و ال weight المدرجة أدناه)، لكن لا يمكنني إقناع النقطة بوضع الدولة الثالثة في الاعلى الدولة الرابعة.

لدي هذه المشكلة مع الكثير من الرسوم البيانية: يبدو أن هناك شيء داخلي لطرد يقرر أنه سيكون من الأفضل أن يكون عقدتان على نفس المرتبة ولا يوجد شيء يمكن القيام به لتجاوزه. لقد كان لدي رمز يحدد أن عقدة واحدة يجب أن تكون rank=sink, ، لكن DOT قررت وضع عقدة أخرى أدناه على أي حال.

هل هناك أي طريقة تشير إلى نقطة أنه من الأهم من ذلك أن العقد من أجل أي قيد آخر؟

يبدو الكود الذي تم استخدامه لتوليد الرسم البياني مثل هذا:

digraph {
    ERROR [label="Error"];
    FirstSTATE [label="Initial State" URL="\ref FirstSTATE"];
    FirstSTATE -> SecondSTATE;
    SecondSTATE [label="Second State" URL="\ref SecondSTATE"];
    SecondSTATE -> ThirdSTATE;
    ThirdSTATE [label="Third State" URL="\ref ThirdSTATE"];
    FourthSTATE [label="Fouth State?" shape="diamond"];
    ThirdSTATE:s -> FourthSTATE:n [weight=50];
    FourthSTATE -> FifthSTATE [label="Yes" ];
    FourthSTATE -> ThirdSTATE [label="No"];
    FifthSTATE [label="Fifth State" URL="\ref FifthSTATE"];
    SixthSTATE [label="Sixth State?" shape="diamond"];
    SixthSTATE -> ERROR [label="Yes" ];
    SixthSTATE -> SeventhSTATE [label="No"];
    FifthSTATE -> SixthSTATE;
    SeventhSTATE [label="Seventh State" URL="\ref SeventhSTATE"];
    SeventhSTATE -> EighthSTATE;
    EighthSTATE [label="Eighth State" URL="\ref EighthSTATE"];
    NinthSTATE [label="Ninth State?" shape="diamond"];
    NinthSTATE -> TenthSTATE [label="Yes" ];
    NinthSTATE -> EighthSTATE [label="No"];
    EighthSTATE -> NinthSTATE;
    TenthSTATE [label="Tenth State" URL="\ref TenthSTATE"];
    EleventhSTATE [label="Eleventh State?" shape="diamond"];
    EleventhSTATE -> ERROR [label="Yes" ];
    EleventhSTATE -> TwelfthSTATE [label="No" ];
    TenthSTATE -> EleventhSTATE;
    TwelfthSTATE [label="Twelfth State" URL="\ref TwelfthSTATE"];
}

يبدو الرسم البياني حاليا مثل هذا:Dot Graph

هل كانت مفيدة؟

المحلول

استخدم "قيد = خطأ".

http://www.graphviz.org/doc/info/attrs.html#d:constraint.

في الرسم البياني الخاص بك:

FourthSTATE -> ThirdSTATE [label="No" constraint=false] ;

ستحصل على:

digraph {
    ERROR [label="Error"];
    FirstSTATE [label="Initial State" URL="\ref FirstSTATE"];
    FirstSTATE -> SecondSTATE;
    SecondSTATE [label="Second State" URL="\ref SecondSTATE"];
    SecondSTATE -> ThirdSTATE;
    ThirdSTATE [label="Third State" URL="\ref ThirdSTATE"];
    FourthSTATE [label="Fouth State?" shape="diamond"];
    ThirdSTATE -> FourthSTATE;
    FourthSTATE -> FifthSTATE [label="Yes" ];
    FourthSTATE -> ThirdSTATE [label="No" constraint=false] ;
    FifthSTATE [label="Fifth State" URL="\ref FifthSTATE"];
    SixthSTATE [label="Sixth State?" shape="diamond"];
    SixthSTATE -> ERROR [label="Yes" ];
    SixthSTATE -> SeventhSTATE [label="No"];
    FifthSTATE -> SixthSTATE;
    SeventhSTATE [label="Seventh State" URL="\ref SeventhSTATE"];
    SeventhSTATE -> EighthSTATE;
    EighthSTATE [label="Eighth State" URL="\ref EighthSTATE"];
    NinthSTATE [label="Ninth State?" shape="diamond"];
    NinthSTATE -> TenthSTATE [label="Yes" ];
    NinthSTATE -> EighthSTATE [label="No"];
    EighthSTATE -> NinthSTATE;
    TenthSTATE [label="Tenth State" URL="\ref TenthSTATE"];
    EleventhSTATE [label="Eleventh State?" shape="diamond"];
    EleventhSTATE -> ERROR [label="Yes" ];
    EleventhSTATE -> TwelfthSTATE [label="No" ];
    TenthSTATE -> EleventhSTATE;
    TwelfthSTATE [label="Twelfth State" URL="\ref TwelfthSTATE"];
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top