Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- bitset<9> row[9];
- bitset<9> col[9];
- bitset<9> zone[3][3];
- int mat[9][9];
- int solve(int i, int j) {
- if (j > 8) {
- j = 0;
- i++;
- }
- if (i > 8) return 1;
- if (mat[i][j] != -1) return solve(i, j + 1);
- for (int k = 0; k < 9; k++) {
- if (row[i][k] || col[j][k] || zone[i / 3][j / 3][k]) continue;
- mat[i][j] = k;
- row[i].flip(k);
- col[j].flip(k);
- zone[i / 3][j / 3].flip(k);
- if (solve(i, j + 1)) return 1;
- row[i].flip(k);
- col[j].flip(k);
- zone[i / 3][j / 3].flip(k);
- }
- return 0;
- }
- int main() {
- int t;
- scanf("%d", &t);
- while (t--) {
- string s;
- for (int i = 0; i < 9; i++) {
- row[i].reset();
- col[i].reset();
- zone[i / 3][i % 3].reset();
- }
- for (int i = 0; i < 9; i++) {
- cin >> s;
- for (int j = 0; j < 9; j++) {
- if (s[j] == '0') mat[i][j] = -1;
- else {
- mat[i][j] = s[j] - '1';
- row[i].set(mat[i][j], true);
- col[j].set(mat[i][j], true);
- zone[i / 3][j / 3].set(mat[i][j], true);
- }
- }
- }
- solve(0, 0);
- for (int i = 0; i < 9; i++) {
- for (int j = 0; j < 9; j++) {
- printf("%d", 1 + mat[i][j]);
- }
- printf("\n");
- }
- printf("\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement