数独
数独の問題を提供し、Pythonで解く方法を示します。
以下の数独の問題を解いてみましょう。
数独の問題:
1 | 5 3 0 0 7 0 0 0 0 |
以下は、この数独をPythonで解くためのコード例です。
このコードはバックトラッキングアルゴリズムを使用しています。
1 | def print_sudoku(board): |
このコードは提供された数独を解き、解答を表示します。
解答は上記のコードを実行すると得られます。
[実行結果]
1 | 解決答: |
ソースコード解説
以下にコードの主要な部分を詳しく説明します。
1. print_sudoku(board)
関数:
- この関数は、数独の盤面を表示するために使用されます。
board
は、数独パズルの現在の状態を表す2次元のリストです。for row in board
ループを使用して、各行を取得し、' '.join(map(str, row))
を使用して各行の数字をスペースで区切って表示します。
2. is_valid_move(board, row, col, num)
関数:
- この関数は、指定した位置
(row, col)
に数字num
を配置できるかどうかを確認するために使用されます。 - 行と列が
num
を含んでいないこと、および3x3のボックスがnum
を含んでいないことを確認します。 - ボックス内の開始位置
(start_row, start_col)
を計算し、そのボックス内でnum
が重複していないかどうかを確認します。
3. solve_sudoku(board)
関数:
- この関数は、数独パズルを解くためのメインのアルゴリズムを含みます。バックトラッキングを使用して、空のセルに適切な数字を埋めていきます。
- 各行と各列の各セルを検査し、セルが空であれば、1から9までの数字を試します。
is_valid_move
関数を使用して、その数字がルールに適合するかどうかを確認します。- 適切な数字が見つかれば、セルにその数字を設定し、再帰的に次のセルに進みます。
- バックトラッキングが必要な場合、セルを0にリセットして前の状態に戻ります。
4. sudoku_board
:
sudoku_board
は、解くべき数独の初期状態を表す2次元リストです。空のセルは0で表現されています。
5. 最後の部分:
solve_sudoku(sudoku_board)
を呼び出し、数独パズルを解きます。- 解が見つかった場合、解答が表示され、それが
print_sudoku
関数を使用して数独の形式で表示されます。 - 解が見つからなかった場合、”この数独は解けません” と表示されます。
このコードを実行すると、与えられた数独パズルが解かれ、正しい解答が表示されるか、解答が見つからない場合には解が存在しないことが通知されます。
結果解説
数独パズルは、バックトラッキングアルゴリズムを使用して解かれました。
実行結果は以下の通りです。
[実行結果]
1 | 5 3 4 6 7 8 9 1 2 |
この実行結果のポイントは以下の通りです:
- 各行と列には1から9までの数字が1回ずつ現れ、重複がありません。
- 各3x3のボックスにも1から9までの数字が1回ずつ現れ、重複がありません。
- 元の数独の問題に含まれていた空のセル(0)には、正しい数字が配置されています。
この解答は、数独のルールに従って正しく解かれており、数独パズルが解決されました😊