(? रिवर्स दर्पण बारी के अंदर से बाहर) मैं एक एल्गोरिथ्म के लिए देख रहा हूँ "की विपरीत" (? रिवर्स बारी के अंदर से बाहर) एक DAG:को उलटने के लिए एल्गोरिथ्म की तलाश एक DAG
A* # I can't ascii-art the arrows, so just
/\ # pretend the slashes are all pointing
B C # "down" (south-east or south-west)
//\ # e.g.
G E D # A -> (B -> G, C -> (E -> F, D -> F))
\/
F
मैं जिस प्रतिनिधित्व का उपयोग कर रहा हूं वह वास्तव में एक डीएजी ( "पैरेंट" पॉइंटर्स नहीं है)। मैं कुछ फैशन में समकक्ष नोड्स के साथ "दर्पण छवि" ग्राफ़ बनाने के दौरान ग्राफ को पार करना चाहता हूं, लेकिन नोड्स के बीच संबंधों की दिशा के बीच की दिशा के साथ।
F*
/\
G* E D # F -> (E -> C -> A, D -> C -> A), G -> B -> A
\ \/ #
B C # Again, arrows point "down"
\/ #
A #
तो इनपुट "जड़ें" (यहां, {ए}) का एक सेट है। आउटपुट ग्राफ़ में "जड़ों" का सेट होना चाहिए: {G, F}। (रूट से मेरा कोई भेजे संदर्भ के साथ एक नोड मतलब है। एक पत्ता नहीं निवर्तमान संदर्भ के साथ एक नोड है।)
इनपुट की जड़ों उत्पादन और वीजा विपरीत की पत्तियों हो जाते हैं। परिवर्तन स्वयं का एक उलटा होना चाहिए।
(उत्सुक के लिए, मैं एक पुस्तकालय मैं लिए उपयोग कर रहा हूँ करने के लिए एक सुविधा जोड़ना चाहते हैं संरचनात्मक क्वेरी किए जाने के लिए एक्सएमएल जिसके द्वारा मैं में अपनी "दर्पण छवि" करने के लिए पहले पेड़ में प्रत्येक नोड मैप कर सकते हैं प्रतिनिधित्व करते हैं दूसरे पेड़ (और फिर से वापस ) मेरी क्वेरी नियम के लिए और अधिक नौवहन लचीलापन प्रदान करने)
क्या कोई कारण है कि आप "पैरेंट" पॉइंटर्स को स्टोर नहीं कर सकते हैं? मैं कल्पना करता हूं कि पत्ती नोड से शुरू होने वाली गहराई से पहली खोज (या जो कुछ भी) करके, उलटा ऑपरेशन मुफ्त में प्रदान करेगा। – Ben