Untitled
raw download clone
CPP
views 35
,
size 2948 b
#include<bits/stdc++.h>
using namespace std;
typedef long long          ll;
typedef vector<int>        vi;
typedef pair<int, int>     ii;
typedef vector<ii>         vii;
typedef set<int>           si;
typedef map<string, int>   msi;
typedef map<int, int>      mii;
typedef map<int, bool>     mib;
#define m 1000000007
#define MX 1000000
#define forr(a,b)          for(int i=a; i<=b; i++)
#define rforr(a,b)         for(int i=b; i>=a; i--)
#define sf(a)              scanf("%d",&a)
#define sf2(a,b)           scanf("%d%d",&a,&b)
#define sf3(a,b,c)         scanf("%d%d%d",&a,&b,&c)
#define sfl(a)             scanf("%lld",&a)
#define sfl2(a,b)          scanf("%lld%lld",&a,&b)
#define pf(a)              printf("%d\n",a)
#define pf2(a,b)           printf("%d %d\n",a,b)
#define pf3(a,b,c)         printf("%d%d%d",a,b,c)
#define pfl(a)             printf("%lld\n",a)
#define pfl2(a,b)          printf("%lld%lld",a,b)
#define pb                 push_back
#define ppb                pop_back
int sud[10][10];
int cnt;
bool in_ro(int n, int x)
{
    forr(1,9) if(sud[x][i]==n) return 1;
    return 0;
}
bool in_col(int n, int y)
{
    forr(1,9) if(sud[i][y]==n) return 1;
    return 0;
}
bool in_box(int n, int x, int y)
{
    x=((x-1)/3)*3;
    y=((y-1)/3)*3;
    for(int i=1; i<4; i++)
        for(int j=1; j<4; j++)
            if(sud[x+i][y+j]==n) return 1;
    return 0;
}
void bos(int x)
{
    //pf(cnt);
    if(cnt==0){
        forr(1,9){
            for(int j=1;j<10;j++){
                printf("%d",sud[i][j]);
            }
            puts("");
        }
        return;
    }
    for(int i=x; i<10;i++)
        for(int j=1;j<10;j++)
            if(sud[i][j]==0){
                for(int k=1;k<10;k++){//pf(k);
                    if(!in_ro(k,i) && !in_col(k,j) && !in_box(k,i,j)){
                        sud[i][j]=k;
                        /*forr(1,9){
                            for(int j=1;j<10;j++){
                                printf("%d",sud[i][j]);
                            }
                            puts("");
                        }*/
                        cnt--;
                        bos(i);
                        if(cnt==0) return;
                        sud[i][j]=0;
                        cnt++;
                    }
                }
                return;
            }
}
int main()
{
    //freopen("input.txt","r",stdin);
    //freopen("output.txt","w",stdout);
    char a[100];
    int t,l=1;
    sf(t);fflush(stdin);
    while(t--){
        cnt=0;
        for(int i=1;i<10;i++){
            scanf("%s",a);
            for(int j=0;j<9;j++){
                if(a[j]=='.') {sud[i][j+1]=0;cnt++;}
                else{
                    int x=a[j]-'0';
                    sud[i][j+1]=x;
                }
            }
        }
        printf("Case %d:\n",l++);
        bos(1);
    }
}
close fullscreen
Login or Register to edit or fork this paste. It's free.