Cod sursa(job #3182500)

Utilizator Echoo55Glijin David Cristian Echoo55 Data 9 decembrie 2023 09:12:41
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.86 kb
#include <fstream>
#include <iostream>
using namespace std;

ifstream f("sudoku.in");
ofstream g("sudoku.out");

int a[10][10], frec[40][11], i, j,okk;

bool linie(int x, int nr)
{
    for(int i=1; i<=9; i++)
        if(a[x][i]==nr)return false;
    return true;
}

bool coloana(int y, int nr)
{
    for(int i=1; i<=9; i++)
        if(a[i][y]==nr)return false;
    return true;
}

void bkt(int x, int y)
{
   if (!okk){
    int ok=1;
    for(int i=1; i<=9; i++)
        for(int j=1; j<=9; j++)
        {
            if(a[i][j]==0)ok=0;
        }
    if(ok==1)
    {
        for(int i=1; i<=9; i++)
        {
            for(int j=1; j<=9; j++)
                g<<a[i][j]<<" ";
            g<<endl;
        }
        okk=1;

    }
    else if(a[x][y]==0)
    {
        int xx, yy,prev=0;

        xx=(x-1)/3+1;
        yy=(y-1)/3+1;
        for(int numar=1; numar<=9; numar++)
        {
            frec[xx*10+yy][prev] = 0;
            if(linie(x,numar) && coloana(y,numar) && frec[xx*10+yy][numar]==0)
                {
               frec[xx*10+yy][numar] = 1;
            a[x][y]=numar;
         prev = numar;
            if(y<9&&!okk)
                bkt(x,y+1);
            else
            {
                y=1;
                if (x<9&&!okk)
                bkt(x+1,y);
            }

                }

        }
        a[x][y]=0;
    }
    else
    {
            if(y<9&&!okk)
                bkt(x,y+1);
            else
            {
                y=1;
                if (x<9&&!okk)
                bkt(x+1,y);
            }
    }


}
}


int main()
{
    int x, y;
    for(i=1; i<=9; i++)
        for(j=1; j<=9; j++)
        {
            f>>a[i][j];
            x=(i-1)/3+1;
            y=(j-1)/3+1;
            frec[x*10+y][a[i][j]]=1;

        }

    bkt(1,1);
    return 0;
}