状態を保存しないにもかかわらず、この数独ソルバーの実装はどのように機能しますか?

ジャンプと水

このリンクには、数独ソルバーアルゴリズムのバックトラッキング実装があります。最初に割り当てられた値が有効な出力を提供しなかった場合、行番号42がセルに最初に割り当てられた値を別の値に戻す方法に注意してください。

しかし、そのセルの値を変更するだけで十分なのかわかりません。この呼び出しは他の多くの呼び出しをトリガーする可能性があり、配列(行列)はメモリ(参照)によって渡されるため、再帰関数を呼び出すたびに行列(grid [N] [N])のコピーを保持しません。そのため、再帰の基本ケースが戻るまでに、再帰の最初のフレームにも反映されるまで変更されます。

私によると、再帰関数を呼び出す直前に、grid [N] [N]の一時的なコピーを作成し、呼び出しが返されるとすぐに、同じフレーム内の次の関数が呼び出される前に復元する必要があります。

何かのようなもの

for (int num = 1; num <= N; num++)
    {
        // if looks promising
        if (isSafe(grid, row, col, num))
        {
            //save grid state
            int[][] temp = new int[N][N];
            save(temp,grid); //copy all values from grid to temp             

            // make tentative assignment
            grid[row][col] = num;

            // return, if success, yay!
            if (SolveSudoku(grid))
                return true;

            //restore grid state           
            restore(temp,grid); //copy all values from temp back to grid

            // failure, unmake & try again
            grid[row][col] = UNASSIGNED;
        }
    }

この詳細を理解するのを手伝ってください。

深さ

それはされた状態を保存:各再帰呼び出しは、呼び出しスタック上の状態を保存します。

グリッドの割り当てられていない部分は、有効なソリューションが見つかるまで変更されます。完了すると、スタックされたすべての関数呼び出しが終了し(38行目と39行目)、grid[][]が解決された状態のままになります。そうでない場合は、現在のセルをそのUNASSIGNEDに復元し、次の可能な値を試行します。

これはブルートフォースソルバーです。あなたはそれについてもグーグルしたいかもしれません。

お役に立てれば。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Pythonで最短の数独ソルバー-どのように機能しますか?

分類Dev

これらのローカル変数は、競合状態を回避するためにどのように機能しますか?

分類Dev

このfabs()の実装はどのように機能していますか?

分類Dev

再帰的なバックトラッキングはどのように機能しますか?Computerphile数独ソルバー

分類Dev

MXレコードがないにもかかわらず、電子メールはどのようにしてこの人に到達できますか?

分類Dev

このSwiftUIバインディング+状態の例は、bodyを再起動せずにどのように機能しますか?

分類Dev

状態を変更したり、クラスベースのコンポーネントにリファクタリングしたりせずに、このヘルパーメソッドを実装するにはどうすればよいですか?

分類Dev

Redis、SCANカーソルの「状態管理」はどのように機能しますか?

分類Dev

パラメータが空であるにもかかわらず、この関数を機能させるにはどうすればよいですか?

分類Dev

反応状態はどのように機能しますか?

分類Dev

`foldr`によるこの` ++ `実装はどのように機能しますか?

分類Dev

この数独ソルバーで再帰がどのように機能するかを理解するのに問題があります

分類Dev

Java数独ブルートフォースソルバー、それはどのように機能しますか?

分類Dev

このstd :: is_classの実装はどのように機能しますか?

分類Dev

この配列交差の実装はどのように機能しますか?

分類Dev

この `init`の実装はどのように機能しますか?

分類Dev

Ionicでは抽象的な状態はどのように機能しますか?

分類Dev

スクリプトでそのように指定しているにもかかわらず、y軸を指数表記にしないように強制することはできないようです。X軸は正常に機能します

分類Dev

変数を伴わない%s-これはどのように機能しますか?

分類Dev

この関数はループのない配列でどのように機能しますか?

分類Dev

DBMSはどのように独自のソートアルゴリズムを実装していますか?それとも彼らですか?

分類Dev

DBMSはどのように独自のソートアルゴリズムを実装していますか?それとも彼らですか?

分類Dev

C ++ nullptr実装はどのように機能しますか?

分類Dev

このJavaScriptコードは、関数を呼び出さずにどのように機能しますか?

分類Dev

このjavascriptオブジェクトの変更はどのように機能しますか?スコープがわからない、持続しない

分類Dev

TensorFlowJでのDQNアルゴリズムのこの実装はどのように機能しますか?

分類Dev

この例には競合状態がありますか?もしそうなら、それをどのように回避できますか?

分類Dev

これにより、実装はpではなくqでどのように機能しますか

分類Dev

コールバックなしのこのJSONPはどのように機能しますか?

Related 関連記事

  1. 1

    Pythonで最短の数独ソルバー-どのように機能しますか?

  2. 2

    これらのローカル変数は、競合状態を回避するためにどのように機能しますか?

  3. 3

    このfabs()の実装はどのように機能していますか?

  4. 4

    再帰的なバックトラッキングはどのように機能しますか?Computerphile数独ソルバー

  5. 5

    MXレコードがないにもかかわらず、電子メールはどのようにしてこの人に到達できますか?

  6. 6

    このSwiftUIバインディング+状態の例は、bodyを再起動せずにどのように機能しますか?

  7. 7

    状態を変更したり、クラスベースのコンポーネントにリファクタリングしたりせずに、このヘルパーメソッドを実装するにはどうすればよいですか?

  8. 8

    Redis、SCANカーソルの「状態管理」はどのように機能しますか?

  9. 9

    パラメータが空であるにもかかわらず、この関数を機能させるにはどうすればよいですか?

  10. 10

    反応状態はどのように機能しますか?

  11. 11

    `foldr`によるこの` ++ `実装はどのように機能しますか?

  12. 12

    この数独ソルバーで再帰がどのように機能するかを理解するのに問題があります

  13. 13

    Java数独ブルートフォースソルバー、それはどのように機能しますか?

  14. 14

    このstd :: is_classの実装はどのように機能しますか?

  15. 15

    この配列交差の実装はどのように機能しますか?

  16. 16

    この `init`の実装はどのように機能しますか?

  17. 17

    Ionicでは抽象的な状態はどのように機能しますか?

  18. 18

    スクリプトでそのように指定しているにもかかわらず、y軸を指数表記にしないように強制することはできないようです。X軸は正常に機能します

  19. 19

    変数を伴わない%s-これはどのように機能しますか?

  20. 20

    この関数はループのない配列でどのように機能しますか?

  21. 21

    DBMSはどのように独自のソートアルゴリズムを実装していますか?それとも彼らですか?

  22. 22

    DBMSはどのように独自のソートアルゴリズムを実装していますか?それとも彼らですか?

  23. 23

    C ++ nullptr実装はどのように機能しますか?

  24. 24

    このJavaScriptコードは、関数を呼び出さずにどのように機能しますか?

  25. 25

    このjavascriptオブジェクトの変更はどのように機能しますか?スコープがわからない、持続しない

  26. 26

    TensorFlowJでのDQNアルゴリズムのこの実装はどのように機能しますか?

  27. 27

    この例には競合状態がありますか?もしそうなら、それをどのように回避できますか?

  28. 28

    これにより、実装はpではなくqでどのように機能しますか

  29. 29

    コールバックなしのこのJSONPはどのように機能しますか?

ホットタグ

アーカイブ