2011-10-02 19 views
25

मैं कैननिकल निर्माण का उपयोग करके नियमित अभिव्यक्ति को पहचानने के लिए एक ईपीएसलॉन एनएफए बना रहा हूं। मैं नियमित अभिव्यक्ति के विभिन्न हिस्सों को समूहित करने के लिए उपग्राफ का उपयोग कर रहा हूं। * ऑपरेटर मुझे विशेष परेशानी दे रहा है क्योंकि डॉट ने नोड्स के ऑर्डर को स्थानांतरित करने का निर्णय लिया है। मैंने किनारों के किनारों को क्रम में रखने के लिए विशेष किनारों को कम करने के लिए मजबूर करने के लिए किनारे के वजन जोड़ने की कोशिश की है, लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है।ग्राफविज़। डॉट नोड ऑर्डरिंग

मैं जो करना चाहता हूं वह एक विशेष क्रम में एक उप-अनुच्छेद में नोड्स को मजबूर करना है ताकि आउटपुट ग्राफ़ किसी विशेष प्रकार के (ज्ञात) निर्माण के रूप में पहचानने योग्य हो। नीचे दिए गए उदाहरण में मुझे उस क्रम में 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; 
} 

graphiz output

उत्तर

30

यहां बताया गया है मुझे लगता है कि ग्राफ लिखना चाहते हैं:

  • सबसे पहले, यह मेरे लिए एक ग्राफ जो ऊपर से करने के लिए चला जाता है नीचे, दाएं से बाएं नहीं, इसलिए मैंने rankdir=LR हटा दिया और केवल rank=same को नोड्स 0/1 और नोड्स 2/3 के लिए जोड़ा।
  • मैं सभी वजन हटाया
  • सबसे महत्वपूर्ण बात, मैं जोड़ा constraint=false किनारों ग्राफ की दिशा के खिलाफ जा रहा करने के लिए - एक नोड से 5 नोड 4 से जा रहा है, और नोड के लिए नोड 6 से एक 3.

यहाँ स्रोत:

graphviz output

:

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 को उसी किनारों पर जोड़ें जैसा मैंने किया था, यह भी काम करता है।

+0

देरी के लिए खेद है, मदद के लिए धन्यवाद! –

संबंधित मुद्दे