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

しかし、私のプログラムは 1 つの解しか出力しません。複数のソリューションを印刷する方法を考え出すのを手伝ってくれる人はいますか? ありがとう。

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);

上記は、(最後の行に到達することによって) 解決策を見つけたときに再帰を停止し、その時点以降もさらに数値を試行し続けます。

また、その時点で 10 であってはならないif(k == 10)ため、パーツにバグがある可能性があります。ループkから抜けた後、セルを 0 に設定する必要があります。k

于 2012-10-23T04:56:32.357 に答える