2

ユーザーに数独パズルを解くプログラムを書こうとしています。しかし、難易度ごとに数字を隠すことにこだわっています。それ、どうやったら出来るの?

4

2 に答える 2

1

9x9 の整数行列があるとします。

int sudoku[9][9];

この行列は正しい数独で満たされています。たとえば、いくつかのエントリを 0 に置き換えるだけです。数独は、多くの場合、中心に対して対称であることを覚えておいてください。

// Hide (i,j) from solution
sudoku[i][j] = 0;
sudoku[8-i][8-j] = 0;

解から 2 つの数値を非表示にするたびに、解けるかどうかをソルバーで確認してください。最後に、そのようなプロセスの一定量のループに難しさを関連付けます

for (k=0; k < difficulty; ) {
  // randomly select (i,j) so that:
  //   - 0 <= i <= 4
  //   - 0 <= j <= 4
  //   - (i,j) != (4, 4)
  //   - solution[i][j] != 0 (i.e., (i, j) has not already been randomly selected
  save1 = solution[i][j];
  solution[i][j] = 0;
  save2 = solution[8-i][8-j];
  solution[8-i][8-j] = 0;

  if (!can_be_solved(solution)) {
    // (i, j) was not a good choice!
    solution[i][j] = save1;
    solution[8-i][8-j] = save2;
  }
  else {
    // it's still OK, let's go one step further
    k += 1;
  }
}
  //

}
于 2013-04-27T19:16:42.773 に答える
0

数独ソルバーを作成し、数独ボードをランダムに生成して、それらが数独ソルバーで有効かどうかをテストできます。ボードを生成するメソッドでは、最初のボードに表示される数字の数を指定する入力を持つことができます。さまざまな難易度の標準的な数を見て、それに基づいてください。

于 2013-04-27T19:16:20.290 に答える