Advertisement
NonSequitur

Untitled

May 6th, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.24 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. bitset<9> row[9];
  6. bitset<9> col[9];
  7. bitset<9> zone[3][3];
  8.  
  9. int mat[9][9];
  10.  
  11. int solve(int i, int j) {
  12.     if (j > 8) {
  13.         j = 0;
  14.         i++;
  15.     }
  16.  
  17.     if (i > 8) return 1;
  18.  
  19.     if (mat[i][j] != -1) return solve(i, j + 1);
  20.  
  21.     for (int k = 0; k < 9; k++) {
  22.         if (row[i][k] || col[j][k] || zone[i / 3][j / 3][k]) continue;
  23.  
  24.         mat[i][j] = k;
  25.  
  26.         row[i].flip(k);
  27.         col[j].flip(k);
  28.         zone[i / 3][j / 3].flip(k);
  29.  
  30.         if (solve(i, j + 1)) return 1;
  31.  
  32.         row[i].flip(k);
  33.         col[j].flip(k);
  34.         zone[i / 3][j / 3].flip(k);
  35.     }
  36.  
  37.     return 0;
  38. }
  39.  
  40. int main() {
  41.     int t;
  42.     scanf("%d", &t);
  43.  
  44.     while (t--) {
  45.         string s;
  46.  
  47.         for (int i = 0; i < 9; i++) {
  48.             row[i].reset();
  49.             col[i].reset();
  50.             zone[i / 3][i % 3].reset();
  51.         }
  52.  
  53.         for (int i = 0; i < 9; i++) {
  54.             cin >> s;
  55.             for (int j = 0; j < 9; j++) {
  56.                 if (s[j] == '0') mat[i][j] = -1;
  57.                 else {
  58.                     mat[i][j] = s[j] - '1';
  59.  
  60.                     row[i].set(mat[i][j], true);
  61.                     col[j].set(mat[i][j], true);
  62.  
  63.                     zone[i / 3][j / 3].set(mat[i][j], true);
  64.                 }
  65.             }
  66.         }
  67.  
  68.         solve(0, 0);
  69.  
  70.         for (int i = 0; i < 9; i++) {
  71.             for (int j = 0; j < 9; j++) {
  72.                 printf("%d", 1 + mat[i][j]);
  73.             }
  74.             printf("\n");
  75.         }
  76.  
  77.         printf("\n");
  78.     }
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement