我在我的计划中试图output multiple sudoku solutions
。例如,当您输入此输入时:
8..6..9.5.............2.31...7318.6.24.....73...........279.1..5...8..36..3......
.
表示空格。数字代表已经填充的空格。输出应该是一个数独的解决方案,如下所示:
814637925325149687796825314957318462241956873638274591462793158579481236183562749
但是,我想输出多个解决方案。这将是应该打印的所有解决方案:
814637925325149687796825314957318462241956873638274591462793158579481236183562749
814637925325941687796825314957318462241569873638472591462793158579184236183256749
834671925125839647796425318957318462241956873368247591682793154579184236413562789
834671925125839647796524318957318462241956873368247591682793154519482736473165289
834671925125839647796524318957318462241965873368247591682793154519482736473156289
但是我的程序只打印出一个解决方案。 谁能帮我提出一种打印多种解决方案的方法?感谢。
答案 0 :(得分:1)
你不应该回到这里:
if(testTheNumber(arr, row, column+1)==true)
{
return true;
}
您应该让算法尝试所有可能的k值。 并且您应该只在最后打印解决方案(当您找到所有数字时)。
答案 1 :(得分:1)
您可以通过在找到解决方案时不停止递归来实现此目的。例如,像:
if (row == 9) {
// print solution here
return true;
}
并删除其他return true;
,然后只递归:
testTheNumber(arr, row, column+1);
当您找到解决方案时(通过到达结束行),上面将停止递归,并且在该点之后还将继续尝试更多数字。
另外,if(k == 10)
部分可能存在错误,因为此时k
永远不应该是10。您需要在k
循环存在后将单元格设置为0。