РЕДАКТИРОВАТЬ: Я на самом деле очень жаль.Моя ошибка была там
//get unassigned position
unassignedPos = GetNextUnassignedValue(matrix);
int col = unassignedPos.Item1;
int row = unassignedPos.Item2;
строка должна быть item1 и col должна быть item2 ... Также выяснилось, что я попробовал это с судоку, который не может быть решен правильно.
IЯ новичок в C # и только начинаю углубляться в кодирование.Кто-нибудь знает, почему я продолжаю получать ошибки Stackoverflow в следующем примере кода?Я дважды проверил и переставил ограничения, они должны быть в порядке.
class SudokuCalc
{
(int, int) finish = (9, 9);
(int, int) unassignedPos = (0, 0);
//method to recursively solve the sudoku
public bool Solve(int[,] matrix)
{
//if we are at the finish position return true
if (finish.Item1 == GetNextUnassignedValue(matrix).Item1
&& finish.Item2 == GetNextUnassignedValue(matrix).Item2)
{
return true;
}
//get unassigned position
unassignedPos = GetNextUnassignedValue(matrix);
int col = unassignedPos.Item1;
int row = unassignedPos.Item2;
//go through all possible values
for (int value = 1; value <= 9; value++)
{
if (IsValid(matrix, row, col, value))
{
matrix[row, col] = value;
//recursively try to solve
if (Solve(matrix))
{
return true;
}
// if we couldnt solve the sudoku
// set the previous value 0 and try again
matrix[row, col] = 0;
}
}
return false;
}