我已经接近完成某些事情,但它还不完全完美......它假设将数独网格验证为有效或无效。我已经扔了7个网格和6/7,验证者成功了。这就是失败的原因。它应该是无效的,因为中间列中的2 4,但我的程序将其指定为VALID。不能预先知道原因!
-------------------------
| 9 5 3 | 2 6 7 | 1 4 8 |
| 6 7 1 | 5 8 4 | 9 3 2 |
| 2 4 8 | 9 1 3 | 7 5 6 |
-------------------------
| 7 1 4 | 6 9 2 | 5 8 3 |
| 5 2 9 | 7 3 8 | 4 6 1 |
| 3 8 6 | 4 5 1 | 2 9 7 |
-------------------------
| 4 6 7 | 3 2 5 | 8 1 9 |
| 1 9 5 | 8 7 6 | 3 2 4 |
| 8 3 2 | 4 1 9 | 6 7 5 |
-------------------------
我的验证码:
bool Verifier::verifySolution()
{
bool found[9];
for (int row = 0; row < 9; row++)
{
// set found elements false
for (int i = 0; i < 9; i++)
found[i] = false;
// Loop 9 col
for (int col = 0; col < 9; col++)
{
// Check if the digit in this col's been found within
// corresponding row
if (found[sudo[row][col] - 1])
return false; //
else
found[sudo[row][col] - 1] = true; //
}
}
int x = 0;
int y = 0;
for (int row = (x / 3) * 3; row < (x / 3) * 3 + 3; row++)
for (int col = (y / 3) * 3; col < (y / 3) * 3 + 3; col++)
if (row != x && col != y && found[sudo[row][col]] == sudo[x][y])
return false;
return true;
}
答案 0 :(得分:0)
我可以认为你没有验证列。您正在验证行,并且您正在验证块,但不验证列。
此外,您必须将每个块的所有已找到数组的条目重置为false(当您到达该部分时,还要为每列重置)。
答案 1 :(得分:0)