Я пытаюсь кодировать игру-головоломку 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;
}