解决数独的多线程方法

时间:2016-05-16 17:01:00

标签: c multithreading pthreads

我必须使用多线程方法来解决一个非常简单的数独游戏。但我并不太了解线程。

int is_finished(sudoku_t *s){
    for(int i=0;i<SUDOKU_SIZE;++i){
        for(int j=0;j<SUDOKU_SIZE;++j)
        {
            if(!correct_row(s,i) || !correct_column(s,j))
                return 0;
        }
    }
    for(int i=0;i<SUDOKU_SIZE;i+=3){
        for(int j=0;j<SUDOKU_SIZE;j+=3){
            if(!correct_box(s,i,j))
                return 0;
        }
    }
    return 1;
}


void* solver(void * sudoku_raw) {
    sudoku_t * tmp = (sudoku_t *) malloc(sizeof(sudoku_t));
    do { 
        tmp = sudoku_raw;
        fill_sudoku_smart(tmp);
    }while(is_finished(tmp)==0);
    sudoku_raw = tmp;
    return (void*) sudoku_raw;
}

void sudoku_solve(sudoku_t * s, int nthread){
    pthread_t threads[nthread];
    int i;
    for (i = 0;i < nthread;i++) {
        pthread_create(&threads[i], NULL, solver, s);
    }
    for (i = 0;i < nthread;i++) {
        pthread_join(threads[i], NULL);
    }
    return;
}

is_finished查看数独的每个部分(行,列和框是否正确)。 correct_rows / column / box工作得很好。

之后,solver制作一个循环来填充我的每个数独。

最后,sudoku_solve,那就是线程被创建了,但它不起作用,而且在我的关卡中,我找不到原因。 谢谢你,如果你可以帮忙,或者你看看。

0 个答案:

没有答案