前回までの状況はこちら
最新ソースはこちら(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);
}
}
ループ条件と判定結果が反転しているので、!演算子で反転させています。
実行結果はこちら。
ちゃんと全部埋まった時点で終了しました。