C++ 用于多个解决方案的数独解算器-缺少解决方案
我已经完成了大部分程序,但当我尝试使用一个部分填充的数独游戏时,它应该有8个解决方案,它打印出的解决方案应该少一个。以下是我查找所有备选方案的功能:C++ 用于多个解决方案的数独解算器-缺少解决方案,c++,recursion,sudoku,backtracking,C++,Recursion,Sudoku,Backtracking,我已经完成了大部分程序,但当我尝试使用一个部分填充的数独游戏时,它应该有8个解决方案,它打印出的解决方案应该少一个。以下是我查找所有备选方案的功能: void guess(Puzzle *puzzle, list<Puzzle> *solutions, stack<Puzzle> *alternatives) { int i, j, x; while(!(*puzzle).isSolved(i, j)) { for(x =
void guess(Puzzle *puzzle, list<Puzzle> *solutions, stack<Puzzle> *alternatives)
{
int i, j, x;
while(!(*puzzle).isSolved(i, j))
{
for(x = 1; x <= 9; ++x)
{
if((*puzzle).checkCell(i, j, x))
{
(*puzzle).assign(i, j, x);
Puzzle alternative;
alternative.initialize(&(*puzzle));
if(solve(&alternative1))
{
(*solutions).push_back(alternative);
(*alternatives).push(*puzzle);
} // if
} // if
} // for
(*puzzle).initialize(&(*alternatives).top());
(*alternatives).pop();
} // while
} // guess
仅当单元格i、j为空时才检查它们。函数isSolved获取i,j,并将空单元格编号i和j放入i,j中,这样当程序猜测时,它只猜测空单元格
这是我的函数solve,它为从guess传入的每个给定部分填充的谜题求解一个单一解:
bool solve(Puzzle *alternative)
{
int i, j, x;
if((*alternative).isSolved(i, j))
return true;
for(x = 1; x <= 9; ++x)
{
if((*alternative).checkCell(i, j, x))
{
(*alternative).assign(i, j, x);
if(solve(alternative))
return true;
(*alternative).assign(i, j, 0);
} // if
} // for
return false;
} // solve()
下面是我尝试过的部分填充数独:
.8…9743.5…8.1…1…8…5…8.4…3…6…7…3.5…8.9724…5
我的程序可以很好地处理大多数谜题,除非它用于查找多个解决方案,否则它往往会错过一个或两个解决方案。请帮忙 什么是拼图::isSolvedint,int?i和j在while语句中使用之前没有初始化。@AviGinsburg:我想布尔拼图::isSolvedint&,int&。影响i,j到第一个空单元坐标。