1

私は数独ジェネレーターを持っています。私のアルゴリズムは次のとおりです。

  1. 有効な塗りつぶされた 9x9 グリッドを作成するには、数独グリッド全体を数字で埋めます。
  2. 一定量の数字を削除します。
  3. が解けるかチェック。
  4. 人間の解決技術を実装して解決し、使用する技術の難易度に応じて難易度を評価します。

問題はステップ 1 にあります。私のブルート フォース アルゴリズムは、通常の数独では完全に機能しますが、対角数独を作成しようとすると (グリッド内の 2 つの対角線のそれぞれにも一意の番号が必要です)、生成時間が数分に増加します。これは受け入れがたい。

そこで、linq を使用してグリッドを埋めることが良い解決策であることがわかりました。

私の考えは:

  1. 可能なすべてのセルと値のコレクションを作成します (81 の位置、それぞれに 9 つの可能な値があります)。
  2. 次に、次のようなクエリのクエリを作成します。

    • すべての可能なセルから、各位置が正確に 1 回存在する必要があります (たとえば、セル 0,0 が 1 回、セル 1,1 が 1 回)。
    • 各セルの値 (1 ~ 9) は、その行、セル、正方形 (セルが対角線上にある場合は対角線) で一意である必要があります。
    • 返される組み合わせは毎回ランダムでなければなりません

より良い解決策があると確信していますが、まだ何も見ていません.linqに関する私のスキルはかなり限られているため、正しい方向性を示してくれて非常に感謝しています. ありがとうございました。

4

0 に答える 0