Iterative ग्राफ डीएफएस कैसे एक पोस्टविसिट जोड़ने के लिए?

तो मुझे निम्नलिखित ग्राफ डीएफएस विधि को लागू करने का प्रयास किया गया है:

 /** Performs a depth-first traversal of G over all vertices
 *  reachable from V.  That is, the fringe is a sequence and
 *  vertices are added to it or removed from it at one end in
 *  an undefined order.  After the traversal of all successors of
 *  a node is complete, the node itself is revisited by calling
 *  the postVisit method on it. */
public void depthFirstTraverse(Graph G,
                               Graph.Vertex v) {
    Stack fringe = new Stack();
    HashSet marked = new HashSet();
    fringe.push(v);
    while (!fringe.isEmpty()) {
        Vertex vert = fringe.pop();
        if (!marked.contains(vert)) {
            marked.add(vert);
            visit(vert);
            for (Edge edge : G.edges(vert)) {
                preVisit(edge, vert);
                fringe.add(edge.getV1());
            }
        }
    }
}

मेरे पास मेरे परीक्षणों के अनुसार सामान्य एल्गोरिदम सही है, लेकिन मुझे अभी भी अंतिम वाक्य में आवश्यकता याद आ रही है: "नोड के सभी उत्तराधिकारी के उत्थान के बाद, नोड को स्वयं पर पोस्टविज़ विधि को कॉल करके पुन: संशोधित किया जाता है। "

मैं इस पोस्ट को विधिवत रूप से जोड़ने के तरीके पर फंस गया हूं (फ़ंक्शन हस्ताक्षर को बदल नहीं सकता है इसलिए रिकर्सन प्रश्न से बाहर है)। कोई विचार?

0

1 उत्तर

आपको एक स्टैक की आवश्यकता है, एक कशेरुक को देखने के रूप में चिह्नित करने की संभावना है, और एक कशेरुक को संसाधित करने के रूप में चिह्नित करने की आवश्यकता है। जब तक ढेर खाली नहीं होता है, तब तक आप निम्न कार्य करते हैं जहां v स्टैक पर शीर्ष वर्टेक्स है।

  • v को न तो विज़िट किया गया है और न ही संसाधित किया गया है: सभी गैर-विज़िट पड़ोसियों को स्टैक पर दबाएं। महत्वपूर्ण: पॉप v।
  • पॉप न करें
  • v को विज़िट के रूप में चिह्नित किया गया है लेकिन संसाधित नहीं किया गया है: यह वह बिंदु है जहां आप v पर पोस्ट विजिट को कॉल करते हैं। बाद में आपको स्टैक से पॉप पॉप करना होगा और इसे संसाधित के रूप में चिह्नित करना होगा
  • v को विज़िट के रूप में चिह्नित किया गया है और संसाधित किया गया है: केवल स्टैक से पॉप v और कुछ भी नहीं करें।
0
जोड़ा