#include
#include
#include
#define USE_FILE 0
int ReadData(int** mat)
{
int i,n=-1;int *p;FILE* fp;
if(NULL!=(fp=fopen("dataIN.txt","r")))
{
fscanf(fp,"%d",&n);
(*mat)=(int*)malloc(n*n*n*n*sizeof(int));
p=(*mat);
for(i=0;i
fscanf(fp,"%d",p++);
fclose(fp);
}
return n;
}
int GetElem_1(int* mat,int n,int group,int index)
{
return *(mat+group*n*n+index);
}
int GetElem_2(int* mat,int n,int group,int index)
{
return *(mat+index*n*n+group);
}
int GetElem_3(int* mat,int n,int group,int index)
{
int row,col;
row=(group/n)*n+index/n;
col=(group%n)*n+index%n;
return *(mat+row*n*n+col);
}
int Compare(int* mat,int n,int (*GetElem)(int*,int,int,int))
{
int i,j,k,err=0;
for(k=0;k
for(i=0;i
for(j=i+1;j
if(GetElem(mat,n,k,i)==GetElem(mat,n,k,j))
{
err++;break;
}
return err;
}
int main(int argc, char *argv[])
{
int *mat;
int n,err=0;
#if USE_FILE
n=ReadData(&mat);
#else
int mat_raw[4][4]={{1,2,3,4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 11, 15, 16}};
mat=(int*)mat_raw;
n=2;
#endif
err+=Compare(mat,n,GetElem_1);
err+=Compare(mat,n,GetElem_2);
err+=Compare(mat,n,GetElem_3);
err>0?printf("No"):printf("Yes");
return 0;
}
int isValidSudoku(int arr[]) {
vector row(9,0);
vector col(9,0);
vector grid(9,0);
for(int i=0;i<81;i++)
{
int x=i/9,y=i%9;
int n=arr[i];
if ( n<1 || n> 9)
return 0;
if ( row[x]& (1<
return 0;
else
row[x]|=(1<
if ( col[y]& (1<
return 0;
else
col[y]|=(1<
int kgrid=(x/3)*3+y/3;
if ( grid[kgrid]&(1<
return 0;
else
grid[kgrid]|=(1<
}
return 1;
}