तो मेरे पास सुडोकू को हल करने के लिए यह विश्वविद्यालय असाइनमेंट है ... मैंने एल्गोरिदम एक्स और नृत्य एल्गोरिदम के बारे में पढ़ा है, लेकिन उन्होंने मेरी मदद नहीं की।बैकट्रैकिंग के साथ सुडोकू एल्गोरिदम - जावा
मुझे इसे बैकट्रैकिंग के साथ बनाना होगा। मैंने विकिपीडिया से दिए गए स्थानों पर संख्याओं के साथ दो आयामी सरणी में कुछ इंडेक्स को हार्ड-कोड किया (इसलिए मुझे यकीन है कि यह हल करने योग्य है)।
कोड मुझे मिल गया है निम्नलिखित:
public void solveSudoku(int row, int col)
{
// clears the temporary storage array that is use to check if there are
// dublicates on the row/col
for (int k = 0; k < 9; k++)
{
dublicates[k] = 0;
}
// checks if the index is free and changes the input number by looping
// until suitable
if (available(row, col))
{
for (int i = 1; i < 10; i++)
{
if (checkIfDublicates(i) == true)
{
board[row][col] = i;
if (row == 8)
solveSudoku(0, col + 1);
else if (col == 8)
solveSudoku(row + 1, 0);
else
solveSudoku(row, col + 1);
board[row][col] = 0;
}
}
}
// goes to the next row/col
else
{
if (row == 8)
solveSudoku(0, col + 1);
else if (col == 8)
solveSudoku(row + 1, 0);
else
solveSudoku(row, col + 1);
}
}
/**
* Checks if the spot on the certain row-col index is free of element
*
* @param row
* @param col
* @return
*/
private boolean available(int row, int col)
{
if (board[row][col] != 0)
return false;
else
return true;
}
/**
* Checks if the number given is not already used in this row/col
*
* @param numberToCheck
* @return
*/
private boolean checkIfDublicates(int numberToCheck)
{
boolean temp = true;
for (int i = 0; i < dublicates.length; i++)
{
if (numberToCheck == dublicates[i])
{
temp = false;
return false;
}
else if (dublicates[i] == 0)
{
dublicates[i] = numberToCheck;
temp = true;
return true;
}
}
return temp;
}
मैं
// goes to the next row/col
else
{
if (row == 8)
solveSudoku(0, col + 1);
else if (col == 8)
solveSudoku(row + 1, 0);
else
solveSudoku(row, col + 1);
}
जिसका मतलब है कि मैं कुछ बिंदु पर प्रत्यावर्तन रोकने के लिए उस पर StackOverflow हो रही है, लेकिन मैं समझ नहीं सकता यह कैसे बाहर! यदि आपको solve()
फ़ंक्शन में कोई अन्य गलती मिलती है - तो मुझे बताएं। क्योंकि मुझे यकीन है कि मैं "बैक ट्रैकिंग" बात पूरी तरह से समझते हैं ...
http://www.byteauthor.com/2010/08/sudoku-solver/ इस बारे में अच्छा उदाहरण है। – chAmi
[विकी भी] (http://en.wikipedia.org/wiki/Sudoku_algorithms# बैकट्रैकिंग);) – sp00m
आपको अपने गणराज्य कोड को देखना चाहिए। मैं नहीं देखता कि यह कैसे जांच सकता है कि किसी नंबर की अनुमति है या नहीं। आप हमेशा इसे रीसेट करते हैं (प्रत्येक सॉल्वसुडोक कॉल के साथ) ताकि यह सबकुछ भूल जाए। मुझे यह भी संदेह है कि 9 तत्वों की एक सरणी कैसे सब कुछ देख सकती है – Origin