मैं एक 9x9 ग्रिड के लिए जावा में एक सुडोकू solver प्रोग्रामिंग कर रहा हूँ का उपयोग कर।सुडोकू solver, बैक ट्रैकिंग और प्रत्यावर्तन
मैं करने के लिए तरीके हैं:
ग्रिड
मुद्रण संघर्ष के लिए
परीक्षण दिया मूल्यों के साथ बोर्ड को प्रारंभ (यदि एक ही नंबर एक ही पंक्ति या 3x3 उप में है ग्रिड)
जो सबसे काम की आवश्यकता है अंक जगह के लिए एक विधि, एक के बाद एक,।
इससे पहले कि मैं कि विधि के साथ विस्तार में जाने, मन मैं इसे हल करने के लिए प्रत्यावर्तन का उपयोग करना होगा में रखना है, साथ ही (यहाँ एक उदाहरण के रूप में http://www.heimetli.ch/ffh/simplifiedsudoku.html एप्लेट घड़ी)
भी उलटे पांव लौटने से, मैं अब तक, और उसके बाद
के माध्यम से दूसरे स्तंभ, आदि इस सुडोकू को सुलझाने हूँ नीचे की तरफ खड़ी चलती, ऊपर बाएं से शुरू, पहले कॉलम के माध्यम से से, मैं निम्नलिखित है:
public boolean placeNumber(int column){
if (column == SUDOKU_SIZE){ // we have went through all the columns, game is over
return true;
}
else
{
int row=0; //takes you to the top of the row each time
while (row < SUDOKU_SIZE) loops through the column downwards, one by one
{
if (puzzle[row][column]==0){ //skips any entries already in there (the given values)
puzzle[row][column]=1; //starts with one
while(conflictsTest(row,column)){ //conflictsTest is the method I wrote, which checks if the given parameters are in conflict with another number
puzzle[row][column] += 1;
}
//BACK TRACKING
placeNumber(column); //recursive call
}
else{
row++; // row already has a number given, so skip it
}
}
column++; // move on to second column
placeNumber(column);
}
return false; // no solutions to this puzzle
}
मैं कहां से उलटे पांव लौटने लेबल है मैं कहाँ लगता है कि मेरा कोड के शेष जाने की जरूरत है।
- यदि मान 10 है, कि मूल्य वापस शून्य पर सेट, एक पंक्ति वापस जाने के लिए, और से 1
कि मूल्य को बढ़ा:
मैं की तर्ज पर कुछ के बारे में सोचा यही कारण है कि बैक ट्रैकिंग 'रणनीति' वास्तव में कई कारणों से काम नहीं करता है:
पिछली पंक्ति, (उर्फ मैं इसे यह या स्पर्श बढ़ाने के लिए माना जाता नहीं कर रहा हूँ एक दिया मूल्य था क्या हुआ अगर, लेकिन इसके बजाय, मैंने वहां दिए गए अंतिम मूल्य पर वापस जाएं)
क्या होगा यदि पिछले मान 9 था। और यदि मैंने 1 तक बढ़ाया है, तो अब हम 10 पर हैं, जो काम नहीं करेगा।
किसी ने मुझे बाहर करने में मदद सकते हैं?
+1 सीखना चाहते हैं, और सिर्फ तंग कोड नहीं चाहते हैं। – qJake
आपको स्पाइकएक्स धन्यवाद। उसी कारण से –
+1। लेकिन आप जानते हैं कि क्या? मैं शर्त लगाता हूं, फिर भी कोड होगा। कुछ लोग सिर्फ विरोध नहीं कर सकते हैं। – Ingo