का उपयोग कर सुडोकू सॉल्वर हाल ही में मैं बैकट्रैकिंग सुडोकू सुलझाने वाले एल्गोरिदम पर काम कर रहा हूं और वर्तमान में मैं यह पूछना चाहता हूं कि मुझे अपनी हल() विधि को शून्य से बूलियन में बदलने के लिए कैसे जाना चाहिए।बैकट्रैकिंग
मैं एक बहुत ही सरल बैक ट्रैकिंग एल्गोरिथ्म का उपयोग कर रहा हूँ, और यह वर्तमान में ठीक काम कर रहा है, लेकिन मैं नहीं बल्कि, एक शून्य के बजाय एक बूलियन होगा क्योंकि एक printstack नहीं होने बहुत अच्छा है ...
धन्यवाद !
public class Backtracking{
static int backtrack = 0;
//check if valid in row
protected static boolean validInRow(int row, int value)
{
for(int col = 0; col < 9; col++)
if(board[row][col] == value)
return false ;
return true ;
}
//check if valid in column
protected static boolean validInCol(int col, int value)
{
for(int row = 0; row < 9; row++)
if(board[row][col] == value)
return false ;
return true ;
}
//check if valid in 3*3
protected static boolean validInBlock(int row, int col, int value)
{
row = (row/3) * 3 ;
col = (col/3) * 3 ;
for(int r = 0; r < 3; r++)
for(int c = 0; c < 3; c++)
if(board[row+r][col+c] == value)
return false ;
return true ;
}
//call other methods
public void solve(int row, int col) throws Exception
{
if(row > 8)
throw new Exception("Solution found") ;
else
{
while(board[row][col] != 0)
{
if(++col > 8)
{
col = 0 ;
row++ ;
if(row > 8)
throw new Exception("Solution found") ;
}
}
for(int value = 1; value < 10; value++)
{
if(validInRow(row,value) && validInCol(col,value) && validInBlock(row,col,value))
{
board[row][col] = value;
new PrintEvent(board);
if(col < 8)
solve(row, col + 1);
else
solve(row + 1, 0);
backtrack++;
}
}
board[row][col] = 0;
}
}
}
+1 प्रयास करने के लिए +1। मैंने कुछ प्रोग्रामिंग प्रतियोगिताओं की है जहां मैंने बैकट्रैकिंग के लिए प्रयास-पकड़ सिद्धांत का उपयोग किया था। यह एक सुरुचिपूर्ण हैक नहीं है लेकिन यह बहुत उपयोगी है। –
धन्यवाद मेरे दोस्त के लिए, मैंने इसे कई बार बदलने की कोशिश की, लेकिन हमेशा व्यर्थ में (ऐसा लगता है जैसे मैं वापसी विवरणों को गड़बड़ कर रहा था)। मैंने वही किया जो आपने किया था और यह एक आकर्षण की तरह काम करता है! – kompsci