如題,請各位高手指點一下
judge判斷小3x3九宮格
row跟col判斷直的以及橫的
附上程式碼
#include<stdio.h>
#include<stdlib.h>
int m[9][9]={0};
int main()
{
int judge(int i,int j,int x,int y);
int col();
int row();
int i,j,flag=0;
while(scanf("%d",&m[0][0])!=EOF)
{
for(i=1;i<9;i++)
scanf("%d",&m[0][i]);
for(i=1;i<9;i++)
for(j=0;j<9;j++)
scanf("%d",&m[i][j]);
flag=judge(0,0,3,3);
flag=judge(0,3,3,6);
flag=judge(0,6,3,9);
flag=judge(3,0,6,3);
flag=judge(3,3,6,6);
flag=judge(3,6,6,9);
flag=judge(6,0,9,3);
flag=judge(6,3,9,6);
flag=judge(6,6,9,9);
if(flag==1)
{
printf("no\n");
flag=0;
continue;
}
else if(row() || col())
{
printf("no\n");
flag=0;
continue;
}
else
printf("yes\n");
flag=0;
}
system("pause");
return 0;
}
int judge(int i,int j,int x,int y)
{
int k,l,temp[9]={0},flag=0;
for(k=i;k<x;k++)
{
for(l=j;l<y;l++)
{
temp[m[k][l]-1]++;
if(temp[m[k][l]-1]>1)
flag=1;
}
}
return flag;
}
int row()
{
int i,temp[9]={0},j,flag=0;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
temp[m[i][j]-1]++;
if(temp[m[i][j]-1]>1)
{
flag=1;
return flag;
}
}
for(j=0;j<9;j++)
temp[j]=0;
}
return flag;
}
int col()
{
int i,temp[9]={0},j,flag=0;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
temp[m[j][i]-1]++;
if(temp[m[j][i]-1]>1)
{
flag=1;
return flag;
}
}
for(j=0;j<9;j++)
temp[j]=0;
}
return flag;
}
已解。