描述
原原园长非常喜欢数独,她开了一个数独的兴趣班,并尝试出题。
这次原原园长出的数独游戏规则是:将一个 9×9 的正方形区域划分为 9 个 3×3 的正方形宫位,要求 1 到 9 这九个数字中的每个数字在每一行、每一列、每个3×3 的小正方形中都只能出现一次。
现在原原园长出了一些题目的答案,想让你来验证下,每次她出的题答案是否正确。
输入描述
输入首先在第一行给出一个正整数 n(≤10),随后给出 n 个填好数字的九宫格。每个九宫格分 9 行给出,每行给出 9 个数字,其间以空格分隔。
输出描述
对每个给定的九宫格,判断其中的数字是否满足游戏规则的要求。满足则在一行中输出 1,否则输出 0 。
用例输入 1
3
5 1 9 2 8 3 4 6 7
7 2 8 9 6 4 3 5 1
3 4 6 5 7 1 9 2 8
8 9 2 1 4 5 7 3 6
4 7 3 6 2 8 1 9 5
6 5 1 7 3 9 2 8 4
9 3 4 8 1 6 5 7 2
1 6 7 3 5 2 8 4 9
2 8 5 4 9 7 6 1 3
8 2 5 4 9 7 1 3 6
7 9 6 5 1 3 8 2 4
3 4 1 6 8 2 7 9 5
6 8 4 2 7 1 3 5 9
9 1 2 8 3 5 6 4 7
5 3 7 9 6 4 2 1 8
2 7 9 1 5 8 4 6 3
4 5 8 3 2 6 9 7 1
1 6 3 7 4 9 5 8 3
8 2 5 4 9 7 1 3 6
7 9 6 5 1 3 8 2 4
3 4 1 6 8 2 7 9 5
6 8 4 2 7 1 3 5 9
9 1 2 8 3 5 6 4 7
5 3 7 9 6 4 2 1 8
2 7 9 1 5 8 4 6 3
4 5 8 3 2 6 9 7 1
1 6 3 7 4 9 5 8 2
用例输出 1
1
0
1
#include <iostream>
using namespace std;
bool checkR(int sudoku[9][9], int row) {
bool used[10] = {false};
for (int col = 0; col < 9; col++) {
int num = sudoku[row][col];
if (used[num]) {
return false;
}
used[num] = true;
}
return true;
}
bool checkC(int sudoku[9][9], int col) {
bool used[10] = {false};
for (int row = 0; row < 9; row++) {
int num = sudoku[row][col];
if (used[num]) {
return false;
}
used[num] = true;
}
return true;
}
bool checkB(int sudoku[9][9], int startRow, int startCol) {
bool used[10] = {false};
for (int row = 0; row < 3; row++) {
for (int col = 0; col < 3; col++) {
int num = sudoku[startRow + row][startCol + col];
if (used[num]) {
return false;
}
used[num] = true;
}
}
return true;
}
bool checkS(int sudoku[9][9]) {
for (int row = 0; row < 9; row++) {
if (!checkR(sudoku, row)) {
return false;
}
}
for (int col = 0; col < 9; col++) {
if (!checkC(sudoku, col)) {
return false;
}
}
for (int startRow = 0; startRow < 9; startRow += 3) {
for (int startCol = 0; startCol < 9; startCol += 3) {
if (!checkB(sudoku, startRow, startCol)) {
return false;
}
}
}
return true;
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int sudoku[9][9];
for (int row = 0; row < 9; row++) {
for (int col = 0; col < 9; col++) {
cin >> sudoku[row][col];
}
}
if (checkS(sudoku)) {
cout << 1 << endl;
} else {
cout << 0 << endl;
}
}
return 0;
}