Could someone help me with the explanation of the codes below?
thanks
#include<iostream.h>
#include<conio.h>
#include<process.h>
int a[9][9]={0,0,9,0,0,0,0,2,0,
0,6,0,0,0,9,0,0,5,
0,0,0,8,7,0,0,0,0,
0,0,1,0,8,0,0,0,0,
0,4,0,5,0,7,1,3,0,
6,0,0,0,1,0,4,0,0,
0,0,0,0,4,8,2,0,0,
7,0,0,6,0,0,0,5,0,
0,9,0,0,0,0,8,0,0};
int b[9][9],k,l,m,z,flag=0,g,h;
int horizontal(int,int,int);
int vertical(int,int,int);
int box(int,int,int);
int assume(int,int);
void main()
{
clrscr();
cout<<"enter values\n";
for(int i=0;i<9;i++)
for(int j=0;j<9;j++)
cin>>a[i][j];
for(i=0;i<9;i++)
for(j=0;j<9;j++)
b[i][j]=a[i][j];
for(i=0;i<9;i=i+1)
for(j=0;j<9;j=j+1)
{
//flag=0;
if(a[i][j]==0)
{
if(flag)
{
i=g;j=h;
flag=0;
}
if(assume(i,j)==2)
{
flag=1;
if(j==0)
{
h=8;
g=i;
g--;
}
else
{
g=i;
h=j;
h--;
}
if(a[g][h]!=0)
{
if(h==0)
{
h=8;
g--;
}
else
{
h--;
}
if(a[g][h]!=0)
{
if(h==0)
{
h=8;
g--;
}
else
{
h--;
}
if(a[g][h]!=0)
{
if(h==0)
{
h=8;
g--;
}
else
{
h--;
}
if(a[g][h]!=0)
{
if(h==0)
{
h=8;
g--;
}
else
{
h--;
}
}
}
}
}
}
}
}
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
cout<<b[i][j]<<"\t";
cout<<"\n";
}
getch();
}
int horizontal(int i,int j,int z)
{
k=i;l=j;
for(j=0;j<9;j++)
{
if(j==l)
{
if(j==8)
break;
j++;
}
if((z==b[i][j]))
return 0;
}
return 1;
}
int vertical(int i,int j,int z)
{
k=i;
l=j;
for(i=0;i<9;i++)
{
if(i==k)
{
if(i==8)
break;
i++;
}
if((z==b[i][j]))
return 0;
}
return 1;
}
int box(int i,int j,int z)
{
k=i;
l=j;
if(i<=2&&j<=2)
{
for(int m=0;m<=2;m++)
{
for(int n=0;n<=2;n++)
{
if((k!=m&&l!=n)&&(z==b[m][n])) //checkout here
return 0;
}}
return 1;
}
else if(i<=2&&j<=5)
{
for(int m=0;m<=2;m++)
for(int n=3;n<=5;n++)
{
if(k==m&&l==n);
else if(z==b[m][n])
return 0;
}
return 1;
}
else if(i<=2&&j<=8)
{
for(int m=0;m<=2;m++)
for(int n=6;n<=8;n++)
{
if(k==m&&l==n);
else if(z==b[m][n])
return 0;
}
return 1;
}
else if(i<=5&&j<=2)
{
for(int m=3;m<=5;m++)
for(int n=0;n<=2;n++)
{
if(k==m&&l==n);
else if(z==b[m][n])
return 0;
}
return 1;
}
else if(i<=5&&j<=5)
{
for(int m=3;m<=5;m++)
for(int n=3;n<=5;n++)
{
if(k==m&&l==n);
else if(z==b[m][n])
return 0;
}
return 1;
}
else if(i<=5&&j<=8)
{
for(int m=3;m<=5;m++)
for(int n=6;n<=8;n++)
{
if(k==m&&l==n);
else if(z==b[m][n])
return 0;
}
return 1;
}
else if(i<=8&&j<=2)
{
for(int m=6;m<=8;m++)
for(int n=0;n<=2;n++)
{
if(k==m&&l==n);
else if(z==b[m][n])
return 0;
}
return 1;
}
else if(i<=8&&j<=5)
{
for(int m=6;m<=8;m++)
for(int n=3;n<=5;n++)
{
if(k==m&&l==n);
else if(z==b[m][n])
return 0;
}
return 1;
}
else if(i<=8&&j<=8)
{
for(int m=6;m<=8;m++)
for(int n=6;n<=8;n++)
{
if(k==m&&l==n);
else if(z==b[m][n])
return 0;
}
return 1;
}
return 1;
}
int assume(int i,int j)
{
m=b[i][j]+1;
while(1)
{
b[i][j]=m;
if(m>9)
{
b[i][j]=0;
return 2;
}
if(vertical(i,j,b[i][j]))
if(horizontal(i,j,b[i][j]))
if(box(i,j,b[i][j]))
{
b[i][j]=m;
return 0;
}
m++;
}
}