Program to Check Whether Given Sudoku Solution Valid or Not

This program will Check whether the given Sudoku Solution is Valid Or Not .
Input :
Output :
Logic To Check for Valid Solution of Sudoku :
-
- Get the Sudoku Solution from the user and store them in 2-Dimensinal integer Array .
- Using another integer array store the count of each digits entered .
- If the entered number is not between 1 to 9 again ask for the input .
- A Valid Sudoku must satisfies the Following Conditions :
- Count of each digit entered must be Exactly 9 .
- All the 9 Rows and 9 Column Elements Sum should be Exactly 45 .
- Also the 9 , 3×3 Sub-matrix Sum of Elements Should be Exactly 45 .
- The Reason for 45 is Sum of 1 to 9 is 45 . (1+2+3+4+5+6+7+8+9=45)
- If the given Sudoku Solution Satisfies the Above three conditions then the Given Sudoku Solution is Valid .
- If the Sudoku Solution fails to Satisfies any one of above three Conditions then the Solution is Invalid .
Program :
[code lang=”c”]
#include<iostream>
using namespace std;
int main()
{
int a[9][9],c[9]; //a=sudoku_values,c=count_of_each_numbers
int w=0; //w=used as flag variable
cout<<"Enter the Sudoku Values One-By-One :";
for(int i=0;i<9;i++) //this for loop is used to get sudoku values
{
for(int j=0;j<9;j++)
{
INPUT:
char t;
cin>>t;
int temp=t-48;
if(temp>0&&temp<10) //if number is not between 1 to 9 then again number is asked
{
a[i][j]=temp;
switch(temp) //this switch statement counts each digits entered and store them in c[]
{
case 1:
c[temp-1]=c[temp-1]+1;
break;
case 2:
c[temp-1]=c[temp-1]+1;
break;
case 3:
c[temp-1]=c[temp-1]+1;
break;
case 4:
c[temp-1]=c[temp-1]+1;
break;
case 5:
c[temp-1]=c[temp-1]+1;
break;
case 6:
c[temp-1]=c[temp-1]+1;
break;
case 7:
c[temp-1]=c[temp-1]+1;
break;
case 8:
c[temp-1]=c[temp-1]+1;
break;
case 9:
c[temp-1]=c[temp-1]+1;
break;
}
}
else
{
cout<<"Enter Between 1-10 !";
goto INPUT;
}
}
}
//if all the digits entered is not have exact count of 9
//then the sudoku is not valid
for(int i=0;i<9;i++)
{
if(c[i]!=9)
{
cout<<"Sudoku is Invalid!";
w=1;
break;
}
}
//the following for loop is used to count sum of both
//horizontal and vertical direction
if(w==0)
{
for(int i=0;i<9;i++)
{
int sh=0,sv=0; //sh=sum_horizontal,sv=sum_vertical
for(int j=0;j<9;j++)
{
sh=sh+a[i][j];
sv=sv+a[j][i];
}
if(sh!=45||sv!=45) //if sum is not exactly 45 then sudoku is invalid
{
cout<<"Sudoku is Invalid!";
w=1;
break;
}
}
}
//this following for loops finds the sum of all 3×3 sub matrices
if(w==0)
{
for(int vc=0;vc<3;vc++)
{
for(int hc=0;hc<3;hc++)
{
int ssm=0; //ssm=sum_sub_matrix
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
ssm=ssm+a[(i+(vc*3))][(j+(hc*3))];
}
//cout<<"\n";
}
if(ssm!=45) //if submatrix sum is not exactly 45 then sudoku is not valid
{
cout<<"Sudoku is Invalid!";
w=1;
break;
}
}
}
}
//if value of flag w is unchanged then it satisfies all condition
//so sudoku is valid
if(w==0)
{
cout<<"Sudoku is Valid !";
}
return 0;
}
[/code]