Guest User

Untitled

a guest
Aug 27th, 2018
340
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.02 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define debug(s) cout<< #s <<" = "<< s <<endl
  6. #define all(v) (v).begin(), (v).end()
  7. #define mem(a,val) memset(a,val,sizeof a)
  8.  
  9. #define ll long long
  10. #define ff first
  11. #define ss second
  12. #define pb push_back
  13. #define endl '\n'
  14.  
  15. bool flag = 0;
  16. int n = 9,tot,val[11],g[11][11];
  17. pair<pair<int,int>,int> vv[111];
  18. vector< pair<pair<int,int>,int> > v;
  19.  
  20. bool cmp(pair<pair<int,int>,int> A, pair<pair<int,int>,int>B)
  21. {
  22.   return A.ss > B.ss;
  23. }
  24.  
  25. bool check(int x, int y, int num)
  26. {
  27.   for(int i = 1; i <= n; ++i){
  28.     if(g[x][i] == num or g[i][y] == num) return false;
  29.   }
  30.   x = ((x-1)/3)*3;
  31.   y = ((y-1)/3)*3;
  32.   for(int i = 1; i <= 3; ++i){
  33.     for(int j = 1; j <= 3; ++j){
  34.       if(g[x+i][y+j] == num) return false;
  35.     }
  36.   }
  37.   return true;
  38. }
  39.  
  40. void backtrack(int idx)
  41. {
  42.   if(flag) return;
  43.   if(idx == tot){
  44.     flag = 1;
  45.     for(int i = 1; i <= n; ++i){
  46.       for(int j = 1; j <= n; ++j){
  47.         cout << g[i][j];
  48.       }
  49.       cout << endl;
  50.     }
  51.     return;
  52.   }
  53.   int x = vv[idx].ff.ff;
  54.   int y = vv[idx].ff.ss;
  55.   for(int i = 1; i <= 9; ++i){
  56.     if(check(x,y,i)){
  57.       g[x][y] = i;
  58.       backtrack(idx+1);
  59.       if(flag) return;
  60.       g[x][y] = 0;
  61.     }
  62.   }
  63. }
  64.  
  65. int main()
  66. {
  67.   ios_base::sync_with_stdio(false);cin.tie(NULL);
  68.   #ifndef ONLINE_JUDGE
  69.     freopen("in", "r", stdin);
  70.     freopen("out","w",stdout);
  71.   #endif
  72.   int t;
  73.   cin >> t;
  74.   for(int cs = 1; cs <= t; ++cs){
  75.     flag = 0;
  76.     mem(g,0);
  77.     mem(val,0);
  78.     for(int i = 1; i <= n; ++i){
  79.       for(int j = 1; j <= n; ++j){
  80.         char c;
  81.         cin >> c;
  82.         if(c == '.') v.pb({{i,j},0});
  83.         else{
  84.           g[i][j] = (c-'0');
  85.           val[i]++;
  86.           val[j]++;
  87.         }
  88.       }
  89.     }
  90.     tot = v.size();
  91.     for(int i = 0; i < tot; ++i){
  92.       v[i].ss = (val[v[i].ff.ff]+val[v[i].ff.ss]);
  93.     }
  94.     for(int i = 0; i < tot; ++i) vv[i] = v[i];
  95.     sort(vv,vv+tot,cmp);
  96.     cout << "Case " << cs << ":" << endl;
  97.     backtrack(0);
  98.     v.clear();
  99.   }
  100. }
Add Comment
Please, Sign In to add comment