我目前正在使用多个线程进行数独游戏。 我将2D阵列板[9] [9]设置为游戏板。我设置了11个线程:1个用于检查行,1个用于检查列,9个用于每个3x3子网格。
我用它来检查数字1-9是否正确放置:
void * check_row(void * n){
numbers * input = (numbers *) n;
int row_begin = input->row;
int col_begin = input->column;
for(int i=row_begin; i<9; ++i){
int row[10] = {0};
for (int j = col_begin; j<9; ++j){
int value = input->board[i][j];
if (row[value] != 0){
return (void *) 0;
}
else{
row[value] = 1;
}
}
}
return (void *) 1;
}
这仅检查解决方案,如果发生则不显示无效输入。 我可以做些什么使其返回错误输入的值吗?
答案 0 :(得分:1)
我可以做些什么使其返回错误输入的值吗?
要返回第一个错误的地址,请返回有问题的正方形的地址。
for(int i=row_begin; i<9; ++i){
int row[10] = {0};
for (int j = col_begin; j<9; ++j){
int value = input->board[i][j];
if (row[value] != 0){
// return (void *) 0;
return &input->board[i][j];
}
else{
row[value] = 1;
}
}
}
// return (void *) 1;
return (void *) 0;
用法
numbers input;
int *result = check_row(&input);
if (result) {
// something wrong
ptrdiff_t offset = result - &input->board[0][0];
int i = offset/9;
int j = offset%9;
printf("%d %d\n", i, j);
} else {
// success
}
替代
向numbers
的成员bool ok[9][9]
添加一个成员,并在出现问题时设置检查功能。