UVa 12988 Sudoku Solution

#include <iostream>
#include <vector>
using namespace std;
vector<int> b;
vector<vector<int> > a(4,vector<int>(4));
void prnt(){
    for(int i=0;i<4;i++){
            for(int j=0;j<4;j++)
                cout<<a[i][j];
            cout<<endl;
        }
}
void chk2(int i,int j){
    int i1,j1,i2,j2;
    if(i<2)
        i1=0,i2=2;
    else
        i1=2,i2=4;
    if(j<2)
        j1=0,j2=2;
    else
        j1=2,j2=4;
    for(;i1<i2;i1++){
        for(;j1<j2;j1++){
            b[a[i1][j1]]=1;
        }
    }
}
void chk(int i,int j){
    b.assign(5,0);
    for(int k=0;k<4;k++)
        b[a[i][k]]=b[a[k][j]]=1;
    chk2(i,j);
}
int fill(int i,int j){
    if(j==4)
        i++,j=0;
    if(i==4){
        prnt();
        return 1;
    }
    if(a[i][j]==0){

        chk(i,j);
        for(int k=1;k<5;k++){
            if(!b[k]){
                a[i][j]=k;
                if(fill(i,j+1)){
                    return 1;
                }
                a[i][j]=0;
                chk(i,j);
            }
        }
        return 0;
    }
    return fill(i,j+1);
}
int main(){
    ios::sync_with_stdio(0);
    int cs=1;
    int t;
    cin>>t;
    while(t--){
        for(int i=0;i<4;i++)
            for(int j=0;j<4;j++){
                ws(cin);
                char x;
                cin>>x;
                if(x!='*')
                    a[i][j]=x-'0';
                else
                    a[i][j]=0;
            }
        cout<<"Case #"<<cs++<<":"<<endl;
        fill(0,0);
    }
}

Comments