C++ 需要多个数独解决方案吗

C++ 需要多个数独解决方案吗,c++,c,algorithm,sudoku,C++,C,Algorithm,Sudoku,我试图在我的程序中输出多个数独解。例如,当您将其作为输入输入时: 8..6..9.5.............2.31...7318.6.24.....73...........279.1..5...8..36..3...... 表示空格。数字表示已填充的空间。输出应该是一个数独解决方案,如下所示: 814637925325149687796825314957318462241956873638274591462793158579481236183562749 但是,我想输出多个解决方案。这

我试图在我的程序中输出多个数独解。例如,当您将其作为输入输入时:

8..6..9.5.............2.31...7318.6.24.....73...........279.1..5...8..36..3......
表示空格。数字表示已填充的空间。输出应该是一个数独解决方案,如下所示:

814637925325149687796825314957318462241956873638274591462793158579481236183562749
但是,我想输出多个解决方案。这将是所有应打印的解决方案:

814637925325149687796825314957318462241956873638274591462793158579481236183562749
814637925325941687796825314957318462241569873638472591462793158579184236183256749
834671925125839647796425318957318462241956873368247591682793154579184236413562789
834671925125839647796524318957318462241956873368247591682793154519482736473165289
834671925125839647796524318957318462241965873368247591682793154519482736473156289
但我的程序只打印出一个解决方案。
谁能帮我想出一种打印多个解决方案的方法?谢谢。

您不应该回到这里:

  if(testTheNumber(arr, row, column+1)==true)
  {
    return true;
  }
相反,应该让算法尝试所有可能的k值。
您应该只在最后打印解决方案(当您找到所有数字时)

只要找到解决方案时不停止递归,就可以做到这一点。例如,类似于:

if (row == 9) {
    // print solution here
    return true;
}
并删除另一个
返回true并只是递归:

testTheNumber(arr, row, column+1);
当您找到解决方案时(通过到达结束行),上面的代码将停止递归,并且在该点之后还会继续尝试更多的数字


另外,如果(k==10)
部分中有一个bug,因为
k
在该点上永远不应该是10。从
k
循环存在后,您需要将单元格设置为0。

维基百科说数独游戏通常只有一个解决方案。我想测试具有多个解决方案的游戏有趣的算法。我怀疑解决方案是将上一个
返回true
更改为告诉应用程序其余部分“在我的状态下,k=4是一个有效答案”,然后继续检查k=5-9。当然,要做到这一点,您必须存储多个板状态,而不仅仅是修改原始的“arr”板@反对者…“通常”只有一个解决方案。@Loki Astari那么我应该如何在网格中输出一组数字呢?罗莉:是的。关于如何输出一组备选解决方案,你有什么建议吗?我以为没有多个数独的提示数超过16。。。那么,我是否只需在row==9之后打印,然后返回true?然后只删除testTheNumber(arr,row,column+1)返回true?好吧,不要删除递归调用,只删除
if
部分和
返回true
部分。但是既然我的函数是布尔函数,我不需要某种bool来计算函数吗?或者我会简单地把returntestthenumber(arr,row,column+1);?如果我删除If(testTheNumber(arr,row,column+1)==true),那么arr[row][column]->number将是0,并且会给我一个错误的解决方案,我认为..不,根本不返回!只需调用函数。事实上,通过这些更改,您不会在任何地方使用返回值(因为您是在最深的递归级别打印解决方案)。因此,您可以将其更改为
void
。那么,当row==9时,我是否可以简单地进行打印?