Многопоточное исследование лабиринтаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Многопоточное исследование лабиринта

Сообщение Anonymous »

При исследовании лабиринта моя цель — продолжить предыдущий путь, если это возможно, пойти в другом направлении, если нет, и создать больше ветвей, если путей больше.
У меня проблема. столкнулся с невозможностью понять причину, по которой 3 находится между 1 и 2 в первой строке.
Буду признателен за любые предложения.

Код: Выделить всё

` 13  ■  1  1  ■  1  1  3  2  2
13  ■  ■  1  1  1  ■  3  ■  2
13  13  13  ■  4  ■  6  3  ■  2
■  14  13  9  4  ■  3  3  ■  2
5  ■  13  ■  4  4  ■  ■  2  2
5  11  11  11  11  ■  5  5  2  ■
5  ■  12  ■  11  ■  5  ■  2  ■
5  8  8  8  ■  ■  5  ■  2  7
5  ■  ■  ■  5  5  5  ■  2  ■
5  5  5  5  5  ■  ■  2  2  10  `

Код: Выделить всё

void Maze_Walkers(labirynt *maze,int myTid,int myx,int myy, int direction) {
vector t;
if (Tid==0) {
myTid = Tid++;
while (true) {
myx = rand() % maze->rows;
myy = rand() % maze->cols;
if (maze->board[myx][myy] == 0) {
maze->board[myx][myy] =myTid;
break;
}
}
}

int paths;
int dx[] = {-1,1,0,0};
int dy[] = {0,0,-1,1};
int lastx;
int lasty;
int lastDir;
do {
paths = 0;
lastx=myx;
lasty=myy;
lastDir=direction;
for (int i = 0; i < 4; i++) {
int dir= (i + lastDir) % 4;
int nx = lastx + dx[dir];
int ny = lasty + dy[dir];
if (nx < 0 || nx >= maze->rows || ny < 0 || ny >= maze->cols) {
continue;
}
mux[nx][ny]->lock();
if (maze->board[nx][ny] == 0) {
paths++;
if(i==0) {
maze->board[nx][ny] = myTid;
mux[nx][ny]->unlock();
myx = nx;
myy = ny;
}else if(paths==1) {
maze->board[nx][ny] = myTid;
mux[nx][ny]->unlock();
myx = nx;
myy = ny;
direction = dir;
}else {
mt.lock();
int childTid=Tid++;
mt.unlock();
maze->board[nx][ny] = childTid;
mux[nx][ny]->unlock();
t.push_back(thread(Maze_Walkers,maze, childTid,nx,ny,dir));
}
}
else {
mux[nx][ny]->unlock();
}
}
}while(paths>0);
for(auto &thr : t) {
thr.join();
}
}

Я думаю, что 2 всегда должны отделяться от 1, и между ними ничего не должно быть.

Подробнее здесь: https://stackoverflow.com/questions/791 ... xploration
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»