使用指针从多个线程中的2d数组返回值

时间:2018-10-26 20:36:33

标签: c

我目前正在使用多个线程进行数独游戏。 我将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;
}

这仅检查解决方案,如果发生则不显示无效输入。 我可以做些什么使其返回错误输入的值吗?

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]添加一个成员,并在出现问题时设置检查功能。