Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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 非完美迷宫生成_Java_Algorithm_Path Finding_Maze_Pathfinder - Fatal编程技术网

Java 非完美迷宫生成

Java 非完美迷宫生成,java,algorithm,path-finding,maze,pathfinder,Java,Algorithm,Path Finding,Maze,Pathfinder,我已经为一个项目编写了A*算法。该项目的要求之一是随机生成50个迷宫 我有点困了,因为这和普通的迷宫不一样。在迷宫世代中,你已经封锁和解除封锁的墙壁,而在我的情况下,我需要封锁和解除封锁的瓷砖。它也不可能是完美的(应该有多条路径)。我还没有在网上找到一个适合这种情况的算法或描述。实现这一目标的最佳方式是什么?如果可能的话,我还想指定一个起点+终点,如果不是的话,那么就指定一个起点。谢谢大家! 这是我手动生成的迷宫示例(规模较小): 您可以为每个磁贴随机分配一个值(表示已阻止或未阻止)。完成此操作

我已经为一个项目编写了A*算法。该项目的要求之一是随机生成50个迷宫

我有点困了,因为这和普通的迷宫不一样。在迷宫世代中,你已经封锁和解除封锁的墙壁,而在我的情况下,我需要封锁和解除封锁的瓷砖。它也不可能是完美的(应该有多条路径)。我还没有在网上找到一个适合这种情况的算法或描述。实现这一目标的最佳方式是什么?如果可能的话,我还想指定一个起点+终点,如果不是的话,那么就指定一个起点。谢谢大家!

这是我手动生成的迷宫示例(规模较小):


您可以为每个磁贴随机分配一个值(表示已阻止或未阻止)。完成此操作后,指定起点和终点
结果可能是这样的。

如果您喜欢使用迷宫生成算法,请使用广泛可用的资源之一,如:,

,您可以使用union find数据结构完成此操作,类似于使用Kruskal算法生成迷宫:

  • 选择起点和终点
  • 将每个单元格(起点和终点除外)标记为已阻止,并将每个单元格放在自己的集合中
  • 随机解锁单元格。取消阻止单元格时,将其集合与其连接的所有未阻止单元格集合合并
  • 开始单元格的集合与结束单元格的集合合并时停止
现在将有一条从起点到终点的路径。如果你想确保迷宫更开放一点,你可以保持随机解锁细胞,直到至少70%被解锁


结果看起来不像传统的迷宫,但可能对a*测试有好处。

这与a*算法有什么关系?相关:我在为不完美的迷宫寻找一个简单的算法。这太完美了,谢谢!还有,这个算法有名字吗?