Friday, 21 July 2017

Sudoku --- Valid configuration or not

 Sudoku --- Valid configuration or not



Sudoku is a popular single player game. The objective is to fill a 9x9 matrix with digits so that each column, each row, and all 9 non-overlapping 3x3 sub-matrices contain all of the digits from 1 through 9. Each 9x9 matrix is partially completed at the start of game play and typically has a unique solution.
Given a completed NxN Sudoku matrix, your task is to determine whether it is a valid solution. A valid solution must satisfy the following criteria:
  • Each row contains each number from 1 to N, once each.
  • Each column contains each number from 1 to N, once each.
  • Divide the NxN matrix into N non-overlapping sqrt(N)xsqrt(N) sub-matrices. Each sub-matrix contains each number from 1 to N, once each.

Write a program to just check if the given matrix is a valid sudoku solution.

Sample Input 1:
4
1 2 3 4
3 4 1 2
2 1 4 3
4 3 2 1

Sample Output 1:

yes
                                               C - Solution
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int n;
int checkgrid(int **a,int row,int col,int check1,int sum)
{    int i,j;
    for(i=row;i<(row+sqrt(n));i++)
    for(j=col;j<(col+sqrt(n));j++)
    {
        if(!(a[i][j]>=1 && a[i][j]<=n)){return 1;}
        check1=check1+a[i][j];
    }
    if(sum!=check1)return 1;
    return 0;
}
int main()
{	int sum=0,check1=0,check2=0,flag=0,i,j;
	scanf("%d",&n);
  	if(n%2==0)	sum=(pow(n,2)/2)+(n/2);
	else sum=(n-(n/2))*n;
    int **a=(int**)malloc(sizeof(int*)*n);
	for(i=0;i<n;i++)a[i]=malloc(n*sizeof(int));
	for(i=0;i<n;i++)
	    for(j=0;j<n;j++)
	      scanf("%d",&a[i][j]);
	for(i=0;i<n;i++)
	{   check1=0;check2=0;
	    for(j=0;j<n;j++)
	    {
	        if(!(a[i][j]>=1&&a[i][j]<=n)){printf("no");
                 return 0;}
	        check1+=a[i][j];check2+=a[j][i];
	    }
	    if(check1!=sum||check2!=sum) {flag=1;break;}
	}
	 if(flag!=1)
	 {  
	     for(i=0;i<n;i=i+sqrt(n))
	        for(j=0;j<n;j=j+sqrt(n))
	         {
       	      flag=checkgrid(a,i,j,0,sum);
              if(flag){printf("no");return 0;}
	         }
	 }
	if(flag)printf("no");
	else	printf("yes");
	return 0;
}

No comments:

Post a Comment