समस्या की मेरी समझ, जैसा कि मूल रूप से कहा गया है और फिर मैके की प्रतिक्रिया के तहत टिप्पणियों द्वारा अद्यतन किया गया है, में निम्नलिखित शामिल हैं: 1) दोनों प्रकार के किनारे (निर्भरता और संघर्ष) निर्देशित हैं; 2) यदि दो नोड्स एक किनारे से जुड़े हुए हैं, तो उन्हें दूसरे से जुड़ा हुआ नहीं होना चाहिए, भले ही वह दूसरे प्रकार का हो या उल्टा हो; 3) यदि दो नोड्स के बीच एक पथ का निर्माण विभिन्न प्रकारों के किनारों को मिलाकर किया जा सकता है, तो यह एक त्रुटि है, बजाय एक परिस्थिति के जिसे अनदेखा किया गया है; 4) यदि एक प्रकार के किनारों का उपयोग करते हुए दो नोड्स के बीच एक रास्ता है, तो हो सकता है कि दूसरे प्रकार के किनारों का उपयोग करके उनके बीच एक और मार्ग न हो; 5) एकल बढ़त प्रकार या मिश्रित धार प्रकारों के चक्रों की अनुमति नहीं है (आवेदन पर एक अनुमान से, मुझे यकीन नहीं है कि संघर्ष-केवल चक्र एक त्रुटि है, लेकिन इस शर्त को हटाया जा सकता है, यदि नहीं।)
इसके अलावा, मैं यह मानूंगा कि उपयोग की गई डेटा संरचना इन आवश्यकताओं के उल्लंघन को रोकती नहीं है (उदाहरण के लिए, एक शर्त का उल्लंघन करने वाला ग्राफ 2 नोड-जोड़ी से एक प्रकार में मानचित्र में व्यक्त नहीं किया जा सकता है (प्रकार, दिशा) यदि नोड-जोड़ी हमेशा पहले सबसे कम संख्या वाला नोड है।) यदि कुछ त्रुटियां व्यक्त नहीं की जा सकती हैं, तो यह माना जाने वाले मामलों की संख्या को कम कर देता है।
वास्तव में तीन ग्राफ़ हैं जिन्हें यहां माना जा सकता है: दो विशेष रूप से एक किनारे का प्रकार, और मिश्रित ग्राफ़ दो प्रकारों में से प्रत्येक के संघ द्वारा गठित। आप इसका उपयोग व्यवस्थित रूप से कुछ संख्या में नोड्स तक सभी ग्राफ उत्पन्न करने के लिए कर सकते हैं। पहले N नोड्स के सभी संभव ग्राफ़ उत्पन्न करें जो किसी भी दो ऑर्डर किए गए नोड्स के जोड़े के बीच एक से अधिक किनारे न हों (जोड़े जोड़े हैं क्योंकि ये निर्देशित ग्राफ़ हैं।) अब इन ग्राफ्स के सभी संभावित जोड़े लें, एक निर्भरता का प्रतिनिधित्व करने वाला और दूसरा प्रतिनिधित्व करने वाले संघर्ष। प्रत्येक जोड़ी के मिलन को बनाएं।
यदि आपकी डेटा संरचना स्थिति 2 के उल्लंघनों को व्यक्त नहीं कर सकती है, तो आप केवल उन सभी संभावित संघर्ष ग्राफ़ों का निर्माण करके विचार किए जाने वाले मामलों को काफी कम कर सकते हैं जो निर्भरता ग्राफ़ के रिक्त स्थान या इसके विपरीत फिट होते हैं। अन्यथा, आप संघ बनाते समय स्थिति 2 के उल्लंघन का पता लगा सकते हैं।
पहले नोड से संयुक्त ग्राफ़ के चौड़ाई-प्रथम ट्रैवर्सल पर, आप प्रत्येक पहुंच योग्य नोड के लिए सभी पथों का सेट बना सकते हैं, और जैसा कि आप ऐसा करते हैं, आप सभी शर्तों के उल्लंघन की जांच कर सकते हैं (चक्र का पता लगाने के लिए, आप कर सकते हैं) टारजन के एल्गोरिथ्म का उपयोग करें ।)
आपको केवल पहले नोड से रास्तों पर विचार करना होगा, भले ही ग्राफ काट दिया जाए, क्योंकि किसी अन्य नोड से पथ किसी अन्य मामले में पहले नोड से पथ के रूप में दिखाई देंगे।
यदि मिश्रित-किनारे वाले रास्तों को केवल त्रुटियों (स्थिति 3) के बजाय नजरअंदाज किया जा सकता है, तो यह निर्भरता और संघर्ष के ग्राफ पर स्वतंत्र रूप से विचार करने के लिए पर्याप्त है, और जांचें कि यदि एक नोड में पहुंच योग्य नहीं है, तो यह दूसरे में नहीं है।
यदि आपको एन -1 नोड्स के रेखांकन की जांच में पाए गए रास्ते याद हैं, तो आप उन्हें एन नोड्स के ग्राफ बनाने और मूल्यांकन के लिए शुरुआती बिंदु के रूप में उपयोग कर सकते हैं।
यह नोड्स के बीच एक ही प्रकार के कई किनारों को उत्पन्न नहीं करता है, लेकिन ऐसा करने के लिए इसे बढ़ाया जा सकता है। हालाँकि, इससे मामलों की संख्या में बहुत वृद्धि होगी, इसलिए यह बेहतर होगा कि जिस कोड का परीक्षण किया जा रहा है, उसका प्रतिनिधित्व करना असंभव है, या इसे विफल करते हुए, ऐसे सभी मामलों को पहले ही फ़िल्टर कर दिया जाए।
इस तरह से एक ओरेकल लिखने की कुंजी यह है कि इसे जितना संभव हो उतना सरल रखें, भले ही इसका अर्थ अक्षम हो, ताकि आप इसमें विश्वास स्थापित कर सकें (आदर्श रूप से इसकी शुद्धता के लिए तर्कों के माध्यम से, परीक्षण द्वारा समर्थित।)
एक बार जब आपके पास परीक्षण मामलों को उत्पन्न करने का साधन होता है, और आप उस ओरेकल पर भरोसा करते हैं जो आपने अच्छे को बुरे से अलग करने के लिए बनाया है, तो आप इसका उपयोग लक्ष्य कोड के स्वचालित परीक्षण को चलाने के लिए कर सकते हैं। यदि यह संभव नहीं है, तो आपका अगला सबसे अच्छा विकल्प विशिष्ट मामलों के परिणामों के साथ कंघी करना है। ऑरेकल उन त्रुटियों को वर्गीकृत कर सकता है जो इसे पाता है, और आपको स्वीकृत मामलों के बारे में कुछ जानकारी देता है, जैसे कि प्रत्येक प्रकार के पथों की संख्या और लंबाई, और क्या कोई नोड्स हैं जो दोनों प्रकार के पथ के प्रारंभ में हैं, और यह उन मामलों को देखने में आपकी मदद कर सकता है जिन्हें आपने पहले नहीं देखा है।