Java 我如何制作一个算法,在确保有一条从左下角到右上角的路径的同时,在2d数组中随机放置1?
我正在尝试制作一个简单的java游戏,玩家无法看到2d数组中的世界,必须进入右、左、上或下。玩家必须在一定时间内从左下到右上。数组将充满0,1将随机分配,同时确保在开始和结束之间有一条路径。 这就是我到目前为止所做的:Java 我如何制作一个算法,在确保有一条从左下角到右上角的路径的同时,在2d数组中随机放置1?,java,arrays,algorithm,random,maze,Java,Arrays,Algorithm,Random,Maze,我正在尝试制作一个简单的java游戏,玩家无法看到2d数组中的世界,必须进入右、左、上或下。玩家必须在一定时间内从左下到右上。数组将充满0,1将随机分配,同时确保在开始和结束之间有一条路径。 这就是我到目前为止所做的: public class PathMaker { private int [][]arr; public PathMaker(int Difficulty){ if (Difficulty == 1) arr = new
public class PathMaker {
private int [][]arr;
public PathMaker(int Difficulty){
if (Difficulty == 1)
arr = new int[5][5];
if (Difficulty == 2)
arr = new int[5][5];
if (Difficulty == 3)
arr = new int[5][5];
Pathset(arr);
}
private static void Pathset(int [][]arr){
int length = arr.length;
int trees = (length-1)*2;
int a, b;
int check = 0;
arr[0][0] = 1;
for (int i = 0; i < trees; i++){
a = (int)((Math.random()*length)+1);
b = (int)((Math.random()*length)+1);
while(check == 0){
if (((arr[a+1][b] == 0) && (arr[a][b+1] == 0)) || a == 1 || b == 1)
check = 1;
a = (int)((Math.random()*length)+1);
b = (int)((Math.random()*length)+1);
}
arr[a][b] = 1;
}
}
}
我是一个初学者,所以请向我详细解释如何做,谢谢。我猜你想要的结果是看起来像随机散落的树,而不是迷宫,但要确保有一条路径通过 只要没有树链将顶部或左侧连接到底部或右侧,就会有一条从左下角到右上角的路径 您可以使用union find数据结构解决此问题: 为顶部+左侧和底部+右侧制作一套。在算法过程中,还将为添加的所有树添加集合。 按随机顺序遍历这些方块,并尝试为每个方块添加一棵树,如下所示。 要测试正方形,请找到它所连接的所有集合。这包括位于墙上的左上角集和/或右下角集,以及相邻正方形中树木的所有集。如果包含左上角和右下角集,则无法在该正方形中添加树,因此请转到下一个。 如果正方形通过,则添加一棵树。为树创建一个新集合,并将其与在3中找到的树所连接的所有集合合并。 当你有足够的树时停下来。
您可能希望签出此页面:可能重复的“先选择路径”。然后为不在路径上的方块选择障碍物。当您从入口点开始生成方块时,尝试使其成为树状结构,然后从上一个方块的相邻方块中随机生成下一个方块。然后,您可以添加更多的随机单元,您的字段应该包含现有路径和其他随机分支!