代码主要创建多个线程,判断每一行,每一列和九个九宫格内的数是否都为1~9且不重复
为什么数组第一行和列要加上0呢;
int flags[12]在后面是做什么用的
这个判断详细解释一下
if(j==0){
for(m=1;m<=9;m++){
memset(t,0,sizeof(int)*10);
for(n=1;n<=9;n++){
t[num[m][n]]=1;
}
for(temp=1;temp<=9;temp++){
if(t[temp]==0){
flags[10]=0;
break;
这是全部代码
struct parameters
{
int row; //行号
int column; //列号
};
int flags[12]={1,1,1,1,1,1,1,1,1,1,1,1};
int num[10][10]={
{0,0,0,0,0,0,0,0,0,0},
{0,6,2,4,5,3,9,1,8,7},
{0,5,1,9,7,2,8,6,3,4},
{0,8,3,7,6,1,4,2,9,5},
{0,1,4,3,8,6,5,7,2,9},
{0,9,5,8,2,4,7,3,6,1},
{0,7,6,2,3,9,1,4,5,8},
{0,3,7,1,9,5,6,8,4,2},
{0,4,9,6,1,8,2,5,7,3},
{0,2,8,5,4,7,3,9,1,6}};
void *function(void *param)
{
int i,j,m,n,temp;
int t[10];
struct parameters *data = (struct parameters*)param;
i=data->row;
j=data->column;
if(i!=0&&j!=0){
for(m=0;m<3;m++){
for(n=0;n<3;n++){
t[num[i+m][j+n]]=1;
}
}
for(m=1;m<10;m++){
if(t[m]==0){
flags[i+j/3]=0;
}
}
}else{
if(j==0){
for(m=1;m<=9;m++){
memset(t,0,sizeof(int)*10);
for(n=1;n<=9;n++){
t[num[m][n]]=1;
}
for(temp=1;temp<=9;temp++){
if(t[temp]==0){
flags[10]=0;
break;
}
}
}
}else{
for(m=1;m<=9;m++){
memset(t,0,sizeof(int)*10);
for(n=1;n<=9;n++){
t[num[n][m]]=1;
}
for(temp=1;temp<=9;temp++){
if(t[temp]==0){
flags[11]=0;
break;
}
}
}
}
}
pthread_exit(0);
}
int main()
{
pthread_t tid;
pthread_attr_t attr;
int i,j;
for(i=1;i<=11;i++)
{
struct parameters *para=(struct parameters*) malloc (sizeof(struct parameters));
switch(i){
case 1:
para->row=1;
para->column=1;
break;
case 2:
para->row=1;
para->column=4;
break;
case 3:
para->row=1;
para->column=7;
break;
case 4:
para->row=4;
para->column=1;
break;
case 5:
para->row=4;
para->column=4;
break;
case 6:
para->row=4;
para->column=7;
break;
case 7:
para->row=7;
para->column=1;
break;
case 8:
para->row=7;
para->column=4;
break;
case 9:
para->row=7;
para->column=7;
break;
case 10:
para->row=1;
para->column=0;
break;
case 11:
para->row=0;
para->column=1;
break;
}
pthread_attr_init(&attr);
pthread_create(&tid,&attr,function,(void*)para);
pthread_join(tid,NULL);
}
for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
printf("%d ",num[i][j]);
}
printf("\n");
}
for(i=1;i<12;i++){
if(flags[i]==0){
printf("No!\n");
return 0;
}
}
printf("Yes!\n");
return 0;