Eu tenho uma tarefa para criar um labirinto com umMatriz 2D. Disseram-me que preciso implementar o algoritmo Union-Find para gerar os labirintos de tamanho arbitrário. Então eu preciso quebrar todas as paredes até que todas as células sejam alcançadas de todas as células.
int[][] matrix = new int[N][M];
As células são os índices de array individuais, mas quais são as paredes? Eu estava pensando em fazer meu próprio tipo de dados de labirinto com construtores para as 4 direções, como
Maze maze = new Maze() //fill in constructor as needed
Os valores da matriz são de 0 a 9, o que posso usar para representar as paredes?
Respostas:
0 para resposta № 1Use arte ASCII. Você pode usar "|" para paredes verticais e "-" para paredes horizontais. É básico, mas uma vez que você possa garantir que isso funcione, você pode passar para os gráficos que são mais agradáveis aos olhos. É importante primeiro se certificar de que está funcional antes de torná-lo bonito.
0 para resposta № 2
Eu recomendo que você crie duas classes, umapara o seu labirinto inteiro e um para uma célula que representa um coordenar no seu labirinto. Se o Coordinate for realmente uma parede, use um valor bool simples. Para o seu algoritmo, talvez dê uma olhada https://en.wikipedia.org/wiki/Maze_generation_algorithm
Talvez este trecho você comece:
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;
}
}