У меня проблема. столкнулся с невозможностью понять причину, по которой 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();
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... xploration
Мобильная версия