All pastes #428023 Raw Edit

Stuff

public text v1 · immutable
·published 2007-04-07 06:11 UTC
rendered paste body
#include<stdio.h>
#include<iostream>
using namespace std;
struct node
{
       int i,j,n;
       int row[9],column[9],block[9];
       int possiblities[10];
        int score,h,g;
};
void initialize();
void score();
void inpt();
int calculation();
void print();
int isemp();
node a[9][9];
int arr[9][9];
int main()
{
    
    int i=0;
    inpt();
    initialize();
    i=calculation();
    print();
    cout<<i;
    cin>>i;
    return 0;
}
void inpt()
{
    int i,j;
     for(int i=0;i<9;i++)
    {
        for(int j=0;j<9;j++)
        {
            cin>>arr[i][j];
        }
    }
}

void initialize()
{
    int x,b1,b2,dist;
    for(int i=0;i<9;i++)
    {
        for(int j=0;j<9;j++)
        {
            a[i][j].g=a[i][j].h=a[i][j].score=0;
             for(int k=0;k<9;k++)
                {
                    a[i][j].row[k]=a[i][j].column[k]=a[i][j].block[k]=0;
                }
                for(int k=1;k<10;k++)
                {
                    a[i][j].possiblities[k]=0;
                }
        }
    }

    for(int i=0;i<9;i++)
    {
        for(int j=0;j<9;j++)
        {
            x=arr[i][j];
            a[i][j].n=x;

            if(x!=0)
            {
                for(int k=0;k<9;k++)
                {
                    a[k][j].possiblities[x]=1;
                    a[i][k].possiblities[x]=1;
                    a[i][k].row[j]=1;
                    a[j][k].column[i]=1;
                }
                b1=i-i%3;
                b2=j-j%3;
                dist=(i%3)*3+(j%3);
                for(int l=b1;l<b1+3;l++)
                for(int m=b2;m<b2+3;m++)
                {
                    if(l!=i&&m!=j)
                    {
                    a[l][m].possiblities[x]=1;
                    a[l][m].block[dist]=1;
                    }
                }
            }

        }
    }
    
    score();
}

void score()
{
    for(int i=0;i<9;i++)
    for(int j=0;j<9;j++)
    {
        for(int k=1;k<10;k++)
        {
            a[i][j].h=a[i][j].h+a[i][j].possiblities[k];
            a[i][j].g=a[i][j].g+a[i][j].row[k]+a[i][j].column[k]+a[i][j].block[k];
        }
        a[i][j].h=9-a[i][j].h;
        a[i][j].g=20-a[i][j].g;
        a[i][j].score=a[i][j].h+a[i][j].g;
    }
}

int isemp()
{
    int i,j,flag=1;
     for(i=0;i<9;i++)
    {
            for(j=0;j<9;j++)
            {
                if(arr[i][j]==0)
                {
                    flag=0;
                    break;
                }
                
            }
    }
    return flag;
}

int calculation()
{
    int err=0,i=0,done=0,j=0,xmin=0,ymin=0,min=100;
    for(i=0;i<=8;i++)
    {
            for(j=0;j<=8;j++)
            {
                    if(a[i][j].n==0&&a[i][j].score<min)
                    {
                        xmin=i;
                        ymin=j;
                        min=a[i][j].score;
                    }
            }
    }
    for(int k=1;k<10;k++)
    {
        if(a[xmin][ymin].possiblities[k]==0)
        {
          arr[xmin][ymin]=k;
          initialize();
           done=isemp();
          if(done==0)
          {
              err=calculation();
              if(err==0)
              {
                 arr[xmin][ymin]=0;
                 initialize();
            
               }
               else
               return 1;
            }
            else
                return 1;
         }
    }
    return 0;
}

void print()
{
    
    for(int i=0;i<9;i++)
    {
    for(int j=0;j<9;j++)
    {
            cout<<a[i][j].n<<"\t";
    }
    cout<<"\n";
    }
    
   
}