用Java写一个用prim算法生成迷宫的代码
时间: 2024-02-24 13:55:23 浏览: 102
好的,以下是用Java实现Prim算法生成迷宫的代码:
```java
import java.util.*;
public class PrimMazeGenerator {
private int width;
private int height;
private int[][] maze;
public PrimMazeGenerator(int width, int height) {
this.width = width;
this.height = height;
this.maze = new int[width][height];
}
public void generate() {
Random random = new Random();
List<int[]> walls = new ArrayList<>();
int startX = random.nextInt(width);
int startY = random.nextInt(height);
maze[startX][startY] = 1;
addWalls(startX, startY, walls);
while (!walls.isEmpty()) {
int[] wall = walls.remove(random.nextInt(walls.size()));
int x = wall[0];
int y = wall[1];
int nx = wall[2];
int ny = wall[3];
if (maze[x][y] == 1 && maze[nx][ny] == 0) {
maze[nx][ny] = 1;
addWalls(nx, ny, walls);
}
}
}
private void addWalls(int x, int y, List<int[]> walls) {
if (x > 0) walls.add(new int[]{x, y, x - 1, y});
if (y > 0) walls.add(new int[]{x, y, x, y - 1});
if (x < width - 1) walls.add(new int[]{x, y, x + 1, y});
if (y < height - 1) walls.add(new int[]{x, y, x, y + 1});
}
public void print() {
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
if (maze[x][y] == 1) {
System.out.print(" ");
} else {
System.out.print("██");
}
}
System.out.println();
}
}
public static void main(String[] args) {
PrimMazeGenerator generator = new PrimMazeGenerator(10, 10);
generator.generate();
generator.print();
}
}
```
这个代码使用了Prim算法来生成迷宫。它首先随机选择一个起点,将其标记为已访问,然后将与它相邻的墙加入到一个列表中。每次从列表中随机选择一个墙,如果这个墙的一侧已经被访问,而另一侧没有被访问,那么将另一侧标记为已访问,并将与它相邻的墙加入到列表中。最后,将所有已访问的位置标记为通路,未访问的位置标记为墙即可。
你可以将代码中的10和10修改为其他的值来生成不同大小的迷宫。
阅读全文