यदि आप नोड्स में "देखी गई" संपत्ति नहीं जोड़ सकते हैं, तो सेट (या मानचित्र) का उपयोग करें और सेट पर सभी विज़िट किए गए नोड्स को तब तक जोड़ें जब तक वे पहले से सेट में न हों। "कुंजी" के रूप में वस्तुओं की एक अद्वितीय कुंजी या पता का प्रयोग करें।
यह आपको चक्रीय निर्भरता के "रूट" नोड के बारे में जानकारी भी देता है जो उपयोगकर्ता को समस्या को ठीक करने के लिए आसान होगा।
एक और समाधान निष्पादित करने के लिए अगली निर्भरता को खोजने का प्रयास करना है। इसके लिए, आपके पास कुछ ढेर होना चाहिए जहां आप याद कर सकते हैं कि आप कहां हैं और आपको आगे क्या करना है। जांचें कि इसे निष्पादित करने से पहले इस स्टैक पर निर्भरता पहले से ही है या नहीं। यदि ऐसा है, तो आपको एक चक्र मिला है।
While this might seem to have a complexity of O(N*M) you must remember that the stack has a very limited depth (so N is small) and that M becomes smaller with each dependency that you can check off as "executed" plus you can stop the search when you found a leaf (so you never have to check every node -> M will be small, too).
मेटामेक में, मैंने ग्राफ को सूचियों की सूची के रूप में बनाया और फिर प्रत्येक नोड को हटा दिया क्योंकि मैंने उनको निष्पादित किया जो स्वाभाविक रूप से खोज मात्रा को काटते हैं। मुझे वास्तव में कभी भी एक स्वतंत्र जांच नहीं चलनी पड़ी, यह सब सामान्य निष्पादन के दौरान स्वचालित रूप से हुआ।
यदि आपको "केवल परीक्षण" मोड की आवश्यकता है, तो बस "सूखी दौड़" ध्वज जोड़ें जो वास्तविक नौकरियों के निष्पादन को अक्षम करता है।