paste bin

malic
C++
#include <cstdio>
#include <cstring>
#include <cstdlib>

char sudoku[9][9];
void outputSudoku()
{
    int i,j,W=9;
    for(i=0;i<W;i++)
    {
        for(j=0;j<W;j++)
        {
            printf("%d",sudoku[i][j]);
        }
        printf("\n");
    }

}

int judge()
{
    int status=1;
    int i,j,k1,k2,W=9;
    char bucket[10];

    for(i=0;status>-1 && i<W;i++)
    {
        memset(bucket,0,sizeof(bucket));
        for(j=0;j<W;j++)
        {
            bucket[ sudoku[i][j] ] ++;
        }
        if(bucket[0]>0)
        {
            status = 0;
        }
        for(j=1;j<10;j++)
        {
            if(bucket[j]>1)
            {
                status = -1;
                break;
            }
        }
    }

    for(j=0;status>-1 && j<W;j++)
    {
        memset(bucket,0,sizeof(bucket));
        for(i=0;i<W;i++)
        {
            bucket[ sudoku[i][j] ] ++;
        }

        if(bucket[0]>0)
        {
            status = 0;
        }
        for(i=1;i<10;i++)
        {
            if(bucket[i]>1)
            {
                status = -1;
                break;
            }
        }
    }
    for(k1=0;status>-1 && k1<W;k1+=3)
    {
        for(k2=0;status >-1 && k2<W;k2+=3)
        {
            memset(bucket,0,sizeof(bucket));
            for(i=0;i<3;i++)
            {
                for(j=0;j<3;j++)
                {
                    bucket[ sudoku[k1+i][k2+j] ]++; 
                }
            }
            if(bucket[0]>0)
            {
                status=0;
            }
            for(i=1;i<10;i++)
            {
                if(bucket[i]>1)
                {
                    status=-1;
                    break;
                }
            }
        }
    }
    return status;
}

void fill(int x,int y)
{
    int i,j;
    bool passFlag = true;
    
    for(i=x;passFlag && i<9;i++)
    {
        for(j=0;passFlag && j<9;j++)
        {
            if(sudoku[i][j]==0)
            {
                passFlag =false;
                break;
            }
        }
        if(passFlag==false)
            break;
    }
    int tryValue,status;
    tryValue=rand();
    for(int k=0;k<9;k++)
    {
        sudoku[i][j] = 1+ (tryValue+k)%9;
        status=judge();
        if(status == 0)
        {
            fill(x,y);
        }
        else if (status == 1)
        {
            outputSudoku();
            return;
        }
        
    }
    sudoku[i][j]=0;
}

void solve()
{
    int i,j,W=9;
    for(i=0;i<W;i++)
    {
        getchar();
        for(j=0;j<W;j++)
        {
            scanf("%c",&sudoku[i][j]);
            sudoku[i][j] -='0';
        }
    }
    fill(0,0);
}

int main(void)
{
    int N;
    scanf("%d",&N);
    while(N--)
    {
        solve();
    }
    return 0;
}

2020 C2QD

fork this code