编辑:我真的很抱歉。我的错误在那里
//get unassigned position
unassignedPos = GetNextUnassignedValue(matrix);
int col = unassignedPos.Item1;
int row = unassignedPos.Item2;
行必须是item1,col必须是item2 ...还发现我尝试了无法正确解决的数独问题。
我是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;
}
答案 0 :(得分:0)
在当前情况下,StackOverflow异常意味着您的Solve
方法递归调用自身太多次。发生这种情况时,您可以停止调试器,并查看带有大量嵌套Solve
调用的所有堆栈跟踪。
在某些情况下,您的情况会迫使代码无限调用Solve
方法。要进行跟踪,您可以在Solve
方法的开头添加日志记录,并写入调用您的磁盘矩阵。也许到某个时候,您会一次又一次获得相同的价值。