【C#】【数独】終了判定を実装する

前回までの状況はこちら

最新ソースはこちら(gitHub)

https://github.com/takishita2nd/sudoku

さて、最後に解析終了処理を実装していきます。

解析終了条件は、9×9=81マス全ての数字が確定した場合、になります。

逆に言えば、81マスの中で、一つでも確定していないマスがあれば、終了しない、と言うことになります。

と言うわけで、コードはこうなりました。

        private bool checkEnd()
        {
            for (int i = 0; i < 9; i++)
            {
                for(int j = 0; j < 9; j++)
                {
                    if(_square[i, j].isConfirmed() == false)
                    {
                        return false;
                    }
                }
            }
            return true;
        }

解析終了ならばtrueを、そうでないならばfalseを返します。

これを周回処理に組み込みます。

        public void run()
        {
            bool roop = true;
            while (roop)
            {
                for(int row = 0; row < 9; row++)
                {
                    for(int col = 0; col < 9; col++)
                    {
                        if(_square[row,col].isConfirmed() == false)
                        {
                            Candidate candidate = new Candidate();
                            searchRowLine(row, candidate);
                            searchColLine(col, candidate);
                            search9Area(row, col, candidate);
                            _square[row, col].checkCandidate(candidate);
                        }
                    }
                }

                roop = !checkEnd();
                FileAccess.Output(_square);
            }
        }

ループ条件と判定結果が反転しているので、!演算子で反転させています。

実行結果はこちら。

ちゃんと全部埋まった時点で終了しました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください