用Java语言,以prim算法生成迷宫
时间: 2023-07-24 08:16:45 浏览: 88
好的,生成迷宫的过程可以分为以下几个步骤:
1. 初始化迷宫
2. 以prim算法生成迷宫
3. 输出迷宫
下面是Java语言实现prim算法生成迷宫的代码。假设迷宫是一个 $n \times n$ 的矩阵,其中 $n$ 是偶数。
```java
import java.util.*;
public class Maze {
private int[][] maze;
private int n;
public Maze(int n) {
this.n = n;
maze = new int[n][n];
}
public void generate() {
Random rand = new Random();
int startX = rand.nextInt(n);
int startY = rand.nextInt(n);
maze[startX][startY] = 1;
List<int[]> walls = new ArrayList<>();
if (startX > 0) walls.add(new int[]{startX - 1, startY, startX, startY});
if (startX < n - 1) walls.add(new int[]{startX + 1, startY, startX, startY});
if (startY > 0) walls.add(new int[]{startX, startY - 1, startX, startY});
if (startY < n - 1) walls.add(new int[]{startX, startY + 1, startX, startY});
while (!walls.isEmpty()) {
int[] wall = walls.remove(rand.nextInt(walls.size()));
int x1 = wall[0], y1 = wall[1], x2 = wall[2], y2 = wall[3];
if (maze[x1][y1] == 0 && maze[x2][y2] == 1) {
maze[x1][y1] = 1;
if (x1 > 0) walls.add(new int[]{x1 - 1, y1, x1, y1});
if (x1 < n - 1) walls.add(new int[]{x1 + 1, y1, x1, y1});
if (y1 > 0) walls.add(new int[]{x1, y1 - 1, x1, y1});
if (y1 < n - 1) walls.add(new int[]{x1, y1 + 1, x1, y1});
}
}
}
public void print() {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (maze[i][j] == 1) {
System.out.print(" ");
} else {
System.out.print("#");
}
}
System.out.println();
}
}
public static void main(String[] args) {
Maze maze = new Maze(10);
maze.generate();
maze.print();
}
}
```
代码中,我们首先初始化了一个 $n \times n$ 的矩阵,然后随机选择一个起点开始生成迷宫。我们将起点标记为已访问,然后将与起点相邻的四个方格加入待选墙列表中。之后我们不断从待选墙列表中随机选择一面墙,将其拆除,并将与该墙相邻的未访问的方格加入待选墙列表中,直到所有的墙都被拆除为止。最后我们打印出生成的迷宫。
希望能够帮到你!
阅读全文