У меня есть реализация алгоритма создания лабиринта DFS на C++, которая, кажется, последовательно создает несколько отдельных областей. Лабиринт представлен как двумерный вектор объектов Node, которые создают связный граф. print_maze печатает узлы и их родителей, которые я использовал для отладки.
Я новичок в C++, но не в программировании — я уверен, что это логическая ошибка, но любая помощь приветствуется.
#include
#include
#include
#include
class Node {
public:
int x;
int y;
Node* parent;
Node(int x, int y, Node* parent = nullptr) {
this->x = x;
this->y = y;
this->parent = parent;
};
};
std::vector generate_full_maze(int columns, int rows) {
std::vector maze(columns, std::vector(rows));
for (int i = 0; i < columns; i++) {
for (int j = 0; j < rows; j++) {
maze[i][j] = new Node(i, j);
}
}
return maze;
}
void print_maze(std::vector maze) {
for (int i = 0; i < maze.size(); i++) {
for (int j = 0; j < maze[i].size(); j++) {
// Print current cell and parent cell
std::cout x 0) {
neighbours.push_back(maze[current_cell->y][current_cell->x - 1]);
}
if (current_cell->x < maxx - 1) {
neighbours.push_back(maze[current_cell->y][current_cell->x + 1]);
}
if (current_cell->y > 0) {
neighbours.push_back(maze[current_cell->y - 1][current_cell->x]);
}
if (current_cell->y < maxy - 1) {
neighbours.push_back(maze[current_cell->y + 1][current_cell->x]);
}
std::random_shuffle(neighbours.begin(), neighbours.end());
for (size_t i = 0; i < neighbours.size(); i++) {
if (!is_visited(neighbours[i]->x, neighbours[i]->y, visited)) {
maze[neighbours[i]->y][neighbours[i]->x]->parent = current_cell;
visited.push_back(neighbours[i]);
stack.push(neighbours[i]);
}
}
}
}
int main() {
int x = 5;
int y = 5;
std::vector maze = generate_full_maze(x, y);
// Initialize the starting node
Node* startNode = new Node(0, 0);
maze[0][0] = startNode;
carve_walls(x, y, maze);
print_maze(maze);
// Clean up maze memory
for (int i = 0; i < y; i++) {
for (int j = 0; j < x; j++) {
delete maze[i][j];
};
};
return 0;
}
Я ожидаю полный лабиринт, в котором доступны все узлы, как это описано в реализации стека, описанной в https://en.wikipedia.org/wiki/Maze_gene ... ith_stack), но конец получилось лабиринт с несколькими областями
Пример вывода:
У меня есть реализация алгоритма создания лабиринта DFS на C++, которая, кажется, последовательно создает несколько отдельных областей. Лабиринт представлен как двумерный вектор объектов Node, которые создают связный граф. print_maze печатает узлы и их родителей, которые я использовал для отладки. Я новичок в C++, но не в программировании — я уверен, что это логическая ошибка, но любая помощь приветствуется. [code]#include #include #include #include
class Node { public: int x; int y; Node* parent; Node(int x, int y, Node* parent = nullptr) { this->x = x; this->y = y; this->parent = parent; }; };
std::vector generate_full_maze(int columns, int rows) { std::vector maze(columns, std::vector(rows));
for (int i = 0; i < columns; i++) { for (int j = 0; j < rows; j++) { maze[i][j] = new Node(i, j); } }
return maze; }
void print_maze(std::vector maze) { for (int i = 0; i < maze.size(); i++) { for (int j = 0; j < maze[i].size(); j++) { // Print current cell and parent cell std::cout x 0) { neighbours.push_back(maze[current_cell->y][current_cell->x - 1]); } if (current_cell->x < maxx - 1) { neighbours.push_back(maze[current_cell->y][current_cell->x + 1]); } if (current_cell->y > 0) { neighbours.push_back(maze[current_cell->y - 1][current_cell->x]); } if (current_cell->y < maxy - 1) { neighbours.push_back(maze[current_cell->y + 1][current_cell->x]); }
Мне интересно узнать, какой алгоритм лучше всего подходит для поиска пути между двумя точками сетки при наличии стен, что превращает ее в лабиринт. После того как лабиринт был просканирован один раз и мы знаем, где находится каждая стена, какой...
Я пытаюсь реализовать программу Python для решения лабиринтов:
Лабиринт выглядит примерно так:
│╶┘│┌┐ + ┘└┐└┐ │┌┘│╵├───┐│┌───┐│╵││┌─┘│││╷│┌─┐└┘┌┤└──┐│└─┐╷ │└ ┤┌┐└┐│╵│┌──┐┌┘└┐│╷└┘┌┐│╵││└┤┌─┐└┘┌┐┌┬╴┌┘│╶ ┬┘┌┐│┌┘└...
Я пытаюсь реализовать программу Python для решения лабиринтов:
Лабиринт выглядит примерно так:
│╶┘│┌┐ + ┘└┐└┐ │┌┘│╵├───┐│┌───┐│╵││┌─┘│││╷│┌─┐└┘┌┤└──┐│└─┐╷ │└ ┤┌┐└┐│╵│┌──┐┌┘└┐│╷└┘┌┐│╵││└┤┌─┐└┘┌┐┌┬╴┌┘│╶ ┬┘┌┐│┌┘└...
представляет тип лабиринта I хочу сделать. Стены не занимают пространство, они просто мешают вам перемещаться между ними. Поскольку стены не представляют собой 2D-плитки, я не думаю, что я бы использовал для их представления 2D-логический массив. Я...