注: 不正なコードが先にあります。あなたは警告されました。
このコードは、数独パズルのすべての 3x3 正方形のすべての要素を反復処理します。以下に示す方法は、各正方形の左上要素の座標を取得し、その正方形の各要素を反復処理する方法です。これは、正しいインデックスにアクセスするだけで合計 4 つの "for" ループが必要になり、次に正しいアクションを実行するために別の "for" ループが必要になることを意味します。
このコードは (撤回されたコードが挿入されていれば) 機能しますが、見た目が非常に乱雑で非常に読みにくいものです。これらのネストされた「for」ループを排除するより良い方法はありますか?
前もって感謝します。
void Sudoku::updateSquares(int grid[9][9], int possibleSolutions[9][9][10])
{
for (int i = 0; i < 9; i += 3)
{
for (int j = 0; j < 9; j += 3) //for every square:
{
//Other code
//...
//Other code
//updates the possibleSolutions array
for (int k = 0; k < 3; k++)
{
for (int l = 0; l < 3; l++) //for every element in every square:
{
if(grid[i+k][j+l] != 0)
continue;
for (int n = 0; n < 10; n++)
{
if(possibleSolutions[i+k][j+l][n] != 0 && numbers[n] == 0)
{
possibleSolutions[i+k][j+l][n] = 0;
possibleSolutions[i+k][j+l][0] -= 1; //reduce the size, which is held in [][][0]
}
}
}
}
}
}
}