#include<stdio.h>
#include<pthread.h>
#include<string.h>
#include<stdlib.h>
typedef struct
{
int row;
int column;
}parameters;
int puzzle[9][9] = {{6,2,4,5,3,9,1,8,7},{5,1,9,7,2,8,6,3,4},{8,3,7,6,1,4,2,9,5},{1,4,3,8,6,5,7,2,9},{9,5,8,2,4,7,3,6,1},{7,6,2,3,9,1,4,5,8},{3,7,1,9,5,6,8,4,2},{4,9,6,1,8,2,5,7,3},{2,8,5,4,7,3,9,1,6}};
int i,j,m,n;
void* checkColumn(void *value);
void* checkRow(void *value);
void* checkSubPuzzle(void *value);
void* checkColumn(void *value){
parameters* temp;
temp = (parameters*)value;
for(j = temp->column;j<9;j++){
int flag[10] = {0,0,0,0,0,0,0,0,0,0};
for(i = temp->row;i<9;i++){
if(flag[puzzle[i][j]] == 0){
flag[puzzle[i][j]] = 1;
}
else{
return (void*)0;
}
}
}
return (void*)1;
}
void* checkRow(void *value){
parameters* temp;
temp = (parameters*)value;
for(i = temp->row;i<9;i++){
int flag[10] = {0,0,0,0,0,0,0,0,0,0};
for(j = temp->column;j<9;j++){
if(flag[puzzle[i][j]] == 0){
flag[puzzle[i][j]] == 1;
}
else{
return (void*)0;
}
}
}
return (void*)1;
}
void* checkSubPuzzle(void *value){
parameters* temp;
temp = (parameters*)value;
for(i = temp->row;i<9;i+=3){
for(j = temp->column;j<9;j+=3){
int flag[10] = {0,0,0,0,0,0,0,0,0,0};
for(m = i;m<i+3;m++){
for(n = j;n<j+3;n++){
if(flag[puzzle[m][n]] == 0){
flag[puzzle[m][n]] = 1;
}
else{
return (void*)0;
}
}
}
}
}
return (void*)1;
}
int main(){
parameters *value = (parameters*)malloc(sizeof(parameters));
value->row = 0;
value->column = 0;
pthread_t t_column,t_row,t_subpuzzle;
void *res_column,*res_row,*res_subpuzzle;
for(i = 0;i<9;i++){
for(j = 0;j<9;j++){
printf("%d ",puzzle[i][j]);
}
printf("\n");
}
printf("\n");
pthread_create(&t_column,NULL,checkColumn,(void*)value);
pthread_create(&t_row,NULL,checkRow,(void*)value);
pthread_create(&t_subpuzzle,NULL,checkSubPuzzle,(void*)value);
pthread_join(t_column,&res_column);
pthread_join(t_row,&res_row);
pthread_join(t_subpuzzle,&res_subpuzzle);
printf("thread exits\n");
if((int)res_column == 1 && (int)res_row == 1 && (int)res_subpuzzle == 1)
printf("valid\n");
else
printf("invalid\n");
return 0;
}
由于是多线程,所以要加-lpthread
gcc a.c -o a -lpthread
运行结果