使用prim算法生成迷宫,Java编写。
代码效果图:
Java代码:
import java.awt.*;
import java.util.ArrayList;
import java.util.Scanner;
public class PrimMaze {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入宽和高:");
int width = sc.nextInt();
int height = sc.nextInt();
System.out.println("迷宫宽为:" + width + ",高为:" + height);
int[][] mazearr = new int[2 * width + 1][2 * height + 1];//动态初始化
// mazearr.length 宽 mazearr[0].length) 高
for (int i = 0; i < mazearr.length; i++) { //行
for (int j = 0; j < mazearr[0].length; j++) {
if (i%2==0 || j%2 ==0){
mazearr[i][j] = 1;
}
if (mazearr[i][j] == 1) {
System.out.print(" #");
} else {
System.out.print(" ");
}
}
System.out.println();
}
// 0 路 1 墙
// 2 已访问路 list 待访问墙的列表
/*
0 1 2 3
* 1 1 1 1 1 1 1 0
* 1 * 1 0 1 0 1 1
* 1 1 1 1 1 1 1 2
* 1 0 1 0 1 0 1 3
* 1 1 1 1 1 1 1
* 1 0 1 0 1 0 1
* 1 1 1 1 1 1 1
* */
int x = 1;
int y = 1; //起始点
Point p = new Point(1,1);
ArrayList<Point> list = new ArrayList<>();
mazearr[x][y] = 2; //起始点设为已访问路
//加入邻墙
list = addWall(new Point(x,y),list,mazearr);
int r ;
while (!list.isEmpty()){
r = (int) (Math.random()*list.size());
x = list.get(r).x;
y = list.get(r).y; //墙坐标
if (mazearr[x-1][y]==0){
mazearr[x][y] = 2;
mazearr[x-1][y]=2; //空格坐标
list = addWall(new Point(x-1,y),list,mazearr);
}