我获得了一个创建带有2D数组的迷宫的任务。 我被告知我需要实现Union-Find算法来生成任意大小的迷宫。然后我需要打破每一面墙,直到每个细胞都可以到达每个细胞。
int[][] matrix = new int[N][M];
单元格是单独的数组索引,但是墙是什么?我正在考虑使用4个方向的构造函数制作我自己的数据类型的迷宫,例如
Maze maze = new Maze() //fill in constructor as needed
数组值是0-9,我可以用什么来表示墙?
答案 0 :(得分:0)
使用ASCII艺术。你可以使用'|'用于垂直墙壁,“ - ”用于水平墙壁。它是基本的,但是一旦你可以确保它的工作原理,你就可以继续使用更加赏心悦目的图形。重要的是首先确保它在功能完善之前发挥作用。
答案 1 :(得分:0)
我建议你创建两个类,一个用于整个迷宫,另一个用于代表迷宫中坐标的Cell。如果Coordinate实际上是一个墙,请使用简单的bool值。对于您的算法,可以查看https://en.wikipedia.org/wiki/Maze_generation_algorithm
也许这个片段可以让你开始:
public class Maze {
private int X_dim, Y_dim; // the dimension of your maze
private Cell[][] cells; // 2d array of Cells
public Maze(int X_dim, int Y_dim) {
this.X_dim = X_dim;
this.Y_dim = Y_dim;
}
}
public class Cell {
private Point coordinate;
boolean visited = false;
// if true, this Cell represents a wall
boolean wall = true;
Cell(Point coordinate, boolean isWall) {
this.coordinate = coordinate;
this.wall = isWall;
}
}