Untitled
unknown
plain_text
2 years ago
2.2 kB
5
Indexable
#include<iostream>
using namespace std;
char sudoku[9][9];
bool kiemTraTheoHangVaCot() {
bool ketQua = true;
for (int i = 0; i < 9; i++)
{
bool visitTheoHang[10] = {false};
bool visitTheoCot[10] = {false};
for (int k = 0; k < 9; k++)
{
// kiem tra theo hang
if (sudoku[i][k] != '.') {
// neu khong phai dau .
// thi kiem tra xem so nay da tung gap chua
int num = sudoku[i][k] - '0'; // chuyen so kieu char ve kieu int
if (visitTheoHang[num]) {
ketQua = false;
i = 9;
break;
}
visitTheoHang[num] = true;
}
// kiem tra theo cot
if (sudoku[k][i] != '.') {
// neu khong phai dau .
// thi kiem tra xem so nay da tung gap chua
int num = sudoku[k][i] - '0'; // chuyen so kieu char ve kieu int
if (visitTheoCot[num]) {
ketQua = false;
i = 9;
break;
}
visitTheoCot[num] = true;
}
}
}
return ketQua;
}
bool kiemTraMaTranCon(int startR, int startC) {
bool visit[10] = {false};
for (int r = startR; r < startR + 3; r++)
{
for (int c = startC; c < startC + 3; c++)
{
if (sudoku[r][c] == '.') {
continue;
}
int num = sudoku[r][c] - '0';
if (visit[num]) {
return false;
}
visit[num] = true;
}
}
return true;
}
int main() {
//freopen("Text.txt", "r", stdin);
int T;
cin >> T;
for (int testCase = 1; testCase <= T; testCase++)
{
cout << "#" << testCase << " ";
// input
for (int i = 0; i < 9; i++)
{
cin >> sudoku[i];
}
// kiem tra theo hang va cot
if (!kiemTraTheoHangVaCot()) {
// neu ket qua la false thi in ra 0
cout << 0 << endl;
continue; // sang test case tiep theo
}
// tiep tuc kiem tra ma tran con 3x3
// bat dau kiem tra tu goc tren cung ben trai cua moi ma tran con 3x3
bool ketQua = true;
for (int i = 0; i < 9; i += 3)
{
for (int k = 0; k < 9; k += 3)
{
if (!kiemTraMaTranCon(i, k)) {
ketQua = false;
i = 9;
break;
}
}
}
if (ketQua) {
cout << 1 << endl;
} else {
cout << 0 << endl;
}
}
return 0;
}Editor is loading...