Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何制作一个算法,在确保有一条从左下角到右上角的路径的同时,在2d数组中随机放置1?_Java_Arrays_Algorithm_Random_Maze - Fatal编程技术网

Java 我如何制作一个算法,在确保有一条从左下角到右上角的路径的同时,在2d数组中随机放置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

我正在尝试制作一个简单的java游戏,玩家无法看到2d数组中的世界,必须进入右、左、上或下。玩家必须在一定时间内从左下到右上。数组将充满0,1将随机分配,同时确保在开始和结束之间有一条路径。 这就是我到目前为止所做的:

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中找到的树所连接的所有集合合并。 当你有足够的树时停下来。
您可能希望签出此页面:可能重复的“先选择路径”。然后为不在路径上的方块选择障碍物。当您从入口点开始生成方块时,尝试使其成为树状结构,然后从上一个方块的相邻方块中随机生成下一个方块。然后,您可以添加更多的随机单元,您的字段应该包含现有路径和其他随机分支!