0

我正在尝试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

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

4

2 回答 2

1

你不应该回到这里:

  if(testTheNumber(arr, row, column+1)==true)
  {
    return true;
  }

相反,您应该让算法尝试所有可能的 k 值。而且您应该只在最后打印解决方案(当您找到所有数字时)。

于 2012-10-23T04:55:32.500 回答
1

您可以通过在找到解决方案时不停止递归来做到这一点。例如,类似:

if (row == 9) {
    // print solution here
    return true;
}

并删除另一个return true;,然后递归:

testTheNumber(arr, row, column+1);

当您找到解决方案(通过到达最后一行)时,上述将停止递归,并且还将在该点之后继续尝试更多数字。

此外,您可能在该if(k == 10)部分中存在错误,因为k此时不应该是 10。k从循环中存在后,您需要将单元格设置为 0 。

于 2012-10-23T04:56:32.357 回答