2012-02-15 15 views
5

मैंने सुडोकस उत्पन्न करने के लिए एक एल्गोरिदम बनाया, लेकिन यह बहुत अक्षम था। प्रत्येक पहेली को उत्पन्न करने में कुछ मिनट लगते थे। तो अब मैं इसे फिर से इष्टतम तरीके से लिखने की कोशिश कर रहा हूं। लेकिन मुझे कुछ समस्याएं आ रही हैं जिनकी मुझे मदद चाहिए।सुडोकू जनरेटर एल्गोरिदम

  1. दो aproaches, खाली ग्रिड के साथ शुरू और संख्याओं को जोड़ने, तो जाँच अगर यह व्याख्या करने योग्य है रहे हैं। दूसरा दृष्टिकोण सभी 81 अंकों के साथ पूर्ण मान्य ग्रिड बनाना है और तब तक हटाएं जब तक कि हम शेष संख्याओं की संख्या से खुश न हों और यह अभी भी हल करने योग्य है।

सबसे पहले मैंने पहले दृष्टिकोण का उपयोग किया लेकिन अब मैं दूसरा उपयोग करने जा रहा हूं क्योंकि मुझे लगता है कि यह अधिक प्रभावी है (हम वैध पहेली से शुरू कर रहे हैं जो हल करने योग्य होने की गारंटी है)। मैं सही हूं कि दूसरा दृष्टिकोण बेहतर है?

  1. जब मैं पूर्ण जनसंख्या ग्रिड उत्पन्न करने की कोशिश कर रहा हूं तो मैं कठिनाइयों में भाग रहा हूं। मेरा एल्गोरिदम है:

    • प्रत्येक कोशिकाओं के लिए उम्मीदवार सेट करें। प्रारंभ में वे संख्या 1 से 9 तक हैं।
    • मूल्य के बिना यादृच्छिक सेल चुनें।
    • उस सेल से यादृच्छिक उम्मीदवार का चयन करें और इसे सेल मान के रूप में असाइन करें। अन्य उम्मीदवारों को त्याग दिया जाता है।
    • अब प्रत्येक पंक्ति, सेल और वर्ग सौंपा सेल से संबंधित के लिए मैं इन उम्मीदवारों से सेल का मान निकालने के लिए, इसलिए प्रत्येक संख्या एक पंक्ति/स्तंभ/वर्ग
    • दोहराएँ

इस में अद्वितीय है तकनीक डुप्लिकेट संख्याओं के बिना यादृच्छिक ग्रिड की गारंटी देता है। हालांकि, ज्यादातर बार, जब मैं नियुक्ति के किसी भी नियम को तोड़ने के लिए संघर्ष नहीं करता - जैसे खाली कोशिकाएं जहां सभी उम्मीदवारों को हटा दिया गया है आदि और मुझे शुरू करने की आवश्यकता है। प्लेसमेंट के नियमों को तोड़ने और यादृच्छिक संख्याओं को तोड़ने के बिना संख्याओं के साथ पूरे ग्रिड को भरने के लिए और अधिक सुरुचिपूर्ण/कुशल तरीका है?

धन्यवाद।

उत्तर

6

क्या आपने मौजूदा एल्गोरिदम और/या कोड देखा है?

एल्गोरिदमिक विवरण के लिए http://www.sudokuwiki.org/Sudoku_Creation_and_Grading.pdf और पीटर Norvig का आलेख http://norvig.com/sudoku.html पर देखें।

पायथन में कुछ कार्यान्वयन हैं। अब तक मैंने कभी प्रकाशित सी # समाधान नहीं देखा है।

शुभकामनाएं!

0

यदि आप कुछ मौजूदा एल्गोरिदम देख रहे हैं तो उसके लिए एक सी # प्रोजेक्ट है। यह वास्तव में पीटर Norvig के समान समाधान से आता है। इसके बारे में और पढ़ें here

आशा है कि इससे मदद मिलेगी!

0

मैं अंतिम प्रविष्टि के साथ संघर्ष करने वाली सभी पूर्व प्रविष्टियों को हटाने के लिए प्रोग्रामिंग का उपयोग करता हूं। इस विधि के साथ, मैं कुछ givens दर्ज कर सकते हैं और समय-समय पर समाधान की गिनती ले सकते हैं या पूरे ग्रिड में प्रवेश कर सकते हैं। मैंने पूरे ग्रिड की यादृच्छिक प्रविष्टि का उपयोग नहीं किया है क्योंकि पूर्व प्रविष्टियों के यादृच्छिक निष्कासन के परिणामस्वरूप एक लंबा सेटअप हो सकता है। यादृच्छिक प्रविष्टि के लिए, मैं उम्मीद करता हूं कि किसी विवाद की अवरुद्ध प्रविष्टि से रिक्त कक्ष हो जाएगा, इसलिए पूर्व विवादित प्रविष्टियों को हटाते समय उत्तर लंबे सेटअप के साथ रहना पड़ सकता है।जब तक कोई खाली सेल नहीं रहता तब तक आपको सभी खाली कोशिकाओं पर वापस लौटना होगा। जब सभी कोशिकाएं भर जाती हैं, तो समाधान मान्य होना चाहिए, अन्यथा एक संघर्ष हटा दिया गया होगा।

संबंधित मुद्दे