Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C/C++ में नंबर लिंक गेम

गेम - मान लीजिए n × n साइज का वर्गों का एरे। इनमें से कुछ वर्ग खाली हैं, कुछ ठोस हैं, और कुछ नॉन-सॉलिड वर्ग 1, 2, 3, ... पूर्णांकों द्वारा सेट हैं। प्रत्येक पूर्णांक बोर्ड पर ठीक दो अलग-अलग वर्गों पर कब्जा करता है। खिलाड़ी का कार्य क्षैतिज और ऊर्ध्वाधर मूवमेंट्स का उपयोग करके बोर्ड पर प्रत्येक पूर्णांक की दो घटनाओं को एक सरल पथ की मदद से जोड़ना है। किसी भी दो अलग-अलग पथों को एक-दूसरे को इंटरसेक्ट करने की अनुमति नहीं है। कोई भी पथ किसी ठोस वर्ग को शामिल नहीं कर सकता (ठोस वर्गों को किसी भी पथ पर प्रकट होने की अनुमति नहीं है)। अंत में, सभी नॉन-सॉलिड वर्गों को पथों द्वारा भरा जाना चाहिए।

एल्गोरिदम - दिए गए बोर्ड आकार n × n के साथ एक वैध रैंडम पज़ल बनाने के लिए, हम पहले बोर्ड पर रैंडम सरल परस्पर नॉन-इंटरसेक्टिंग पथ उत्पन्न करते हैं। यदि कुछ आइसोलेटेड वर्ग सभी उत्पन्न पथों के बाहर रह जाते हैं, तो इन आइसोलेटेड वर्गों को ठोस (निषिद्ध) के रूप में चिह्नित करें। अगला हम पथों के एंडपॉइंट्स और ठोस वर्गों की सूची को पज़ल के रूप में प्रदान करते हैं।

इस प्रकार हम पहले एक समाधान उत्पन्न करते हैं, और फिर समाधान से पज़ल निकालते हैं। पथ और ठोस वर्ग n × n बोर्ड को विभाजित या पार्टीशन करते हैं। हम इस पार्टीशन को उत्पन्न करने के लिए यूनियन-फाइंड डेटा स्ट्रक्चर को लागू करते हैं। डेटा स्ट्रक्चर बोर्ड पर n^2 वर्गों के सेट के सबसेट्स के साथ डील करता है।

स्यूडोकोड

  • बोर्ड पर (a, b) और (c, d) वर्गों को रैंडमली ढूंढें जैसे कि -

    • (a, b) और (c, d) एक-दूसरे के पड़ोसी हैं, और

    • न तो (a, b) और न ही (c, d) अब तक उत्पन्न किसी पथ से संबंधित है। यदि पूरे बोर्ड पर ऐसा कोई वर्ग जोड़ा नहीं मिलता है, तो FAILURE लौटाएं /* यहां, (a, b) और (c, d) बनने वाले नए पथ पर पहले दो वर्ग हैं। */

  • (a, b) और (c, d) को समाहित करने वाले दो यूनियन-फाइंड ट्रीज का यूनियन बनाएं।

  • इतनी देर दोहराएं जब तक वर्तमान पथ बढ़ाया जा सकता है -

    • (a, b) = (c, d) को रीनेम करें।

  • (a, b) के रैंडम पड़ोसी वर्ग (c, d) को ढूंढें जैसे कि -

    • (c, d) अब तक उत्पन्न किसी पथ से संबंधित नहीं है (वर्तमान वाले सहित)

    • आंशिक रूप से निर्मित वर्तमान पथ पर (c, d) का एकमात्र पड़ोसी (a, b) है।

  • यदि ऐसा कोई पड़ोसी (c, d) नहीं मिलता है, तो पथ को आगे नहीं बढ़ाया जा सकता, इसलिए लूप तोड़ें

  • अन्यथा, (a, b) और (c, d) से संबंधित दो यूनियन-फाइंड ट्रीज का यूनियन बनाएं।

  • नए पथ की शुरुआत और अंत में स्थित दो वर्गों के एंडपॉइंट फ्लैग्स सेट करें।

  • SUCCESS लौटाएं

  1. त्रिकोणीय माचिस संख्या (Triangular Matchstick Number) के लिए C/C++ प्रोग्राम? त्रिकोणीय माचिस संख्या (Triangular Matchstick Number) के लिए C/C++ प्रोग्राम?

    माचिस की तीलियों का उपयोग करके बनाया गया एक त्रिकोण जो एक समबाहु त्रिकोण बनाने के लिए व्यवस्थित होता है, इसे त्रिकोणीय माचिस संख्या कहा जाता है। त्रिकोणीय माचिस संख्या माचिस त्रिकोण बनाने के लिए आवश्यक माचिस की तीलियों की संख्या है। इस समस्या में, हमारे पास माचिस पिरामिड की मंजिलों की संख्या X है।

  1. nवीं कैटलन संख्या (nth Catalan Number) के लिए C/C++ प्रोग्राम? nवीं कैटलन संख्या (nth Catalan Number) के लिए C/C++ प्रोग्राम?

    कैटलन संख्याएं (Catalan numbers) संख्याओं का एक अनुक्रम है। कैटलन संख्याएं प्राकृतिक संख्याओं का एक अनुक्रम बनाती हैं जो विभिन्न गणना समस्याओं में होती हैं, अक्सर पुनरावर्ती रूप से परिभाषित वस्तुओं से जुड़ी होती हैं। Cₙ लंबाई 2n के डाइक शब्दों (Dyck words) की संख्या है। एक डाइक शब्द n Xs और n Ys

  1. C++ में आयत में वर्गों की संख्या गिनना C++ में आयत में वर्गों की संख्या गिनना

    =B। लक्ष्य LxB आकार के आयत में समायोजित किए जा सकने वाले वर्गों की संख्या ढूंढना है। उपरोक्त आकृति 3x2 आकार के एक आयत को दर्शाती है। इसमें 2, 2x2 वर्ग और 6, 1x1 वर्ग हैं। कुल वर्ग = 6+2=8। LxB आकार के हर आयत में L*B संख्या के 1x1 वर्ग होते हैं। सबसे बड़े वर्ग BxB आकार के होते हैं। L=B=1 के लिए, वर