Что за ошибка в этом коде задач игры openMP футошики? - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь кодировать игру-головоломку futoshiki параллельно, используя c ++ и openMP. Futoshiki - игра-головоломка, похожая на судоку. Я закодировал последовательную версию, и она работает нормально, но мой параллельный код заканчивается раньше, чем предполагалось, я думаю, что потоки с заданиями в какой-то момент обрабатывают sh, поэтому остальная часть моего кода не выполняется, но я не получаю ошибку вывод. Это нормально, или я неправильно понимаю мою ошибку.

DFS - это функция, которая должна решить проблему, и после всех вызовов функции я печатаю что-то в зависимости от того, что вывод правильный или неправильный, но программа заканчивается до того, как напечатает что-нибудь. Я не могу понять, в чем проблема. Мой код ниже:

    bool dfs(int** matrix,vector<vector<int>> & visited,vector<vector<bool>> & constraintsUp,vector<vector<bool>> & constraintsDown,int &X,int &Y)
   {

    pair<int,int> xy=getUnassignedLocation(visited,X,Y);
    if(xy==GRID_FULL)
    {
        std::cout<<"hello"<<std::endl;
        return true;
    }
    if(HELPPLS)
    {
        return false;
    }
    int x=xy.first;
    int y=xy.second;

    for(int it=1;it<=SIZE;++it)
    {
        if(isSafe(it,x,y,visited,constraintsUp,constraintsDown))
        {
            visited[x][y]=it;
            if(DEPTHCOUNT)
            {
                DEPTHCOUNT--;
                bool check=false;
                #pragma omp task default(shared) shared(visited,constraintsUp,constraintsDown)
                {
                    int **newMatrix;
                    copy(newMatrix,matrix);
                    vector<vector<int>> newVisited(visited);
                    vector<vector<bool>>newConstraintsUp(constraintsUp);
                    vector<vector<bool>>newConstraintsDown(constraintsDown);
                    int xx=x;
                    int yy=y;
                    HELPPLS=HELPPLS||dfs(newMatrix,newVisited,newConstraintsUp,newConstraintsDown,xx,yy);
                }
            }
            else
            {
                if (dfs(matrix,visited,constraintsUp,constraintsDown,x,y))
                {   HELPPLS=true;
                    if(v)
                    {
                        temp=visited;
                        v=false;
                    }
                    return true;
                }
            }
            visited[x][y]=BLANK;
        }
    }
    return false;
}
...