问题标签 [maze]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1113 浏览

java - 使用 Java GUI 绘制迷宫 - 矩形一个接一个打印

给定以下代码:

类 BasicShapes

我需要画迷宫,每两个单元格之间有分隔符作为门/墙。在方法 drawMaze() 中,我首先创建一个带有顶点和边(vertices=rooms,edges=Door/Wall)的图 G=(V,E),然后我想使用它。

在while循环中,我按边数运行循环,每次我得到两个房间的坐标(在x,y平面上),我想用连接器(墙/门)打印第一个房间与另一个房间,但每次第一个房间都印在另一个房间上(以及其余的边缘)。

我该如何解决?

问候,罗恩

0 投票
1 回答
314 浏览

java - 尝试放大迷宫的 GUI 时重叠的矩形

我对迷宫和 GUI 的冒险仍在继续,目前我可以看到任何图形G=(V,E) ,其中顶点是房间,边缘是连接器(门或墙),但矩形的尺寸太小,所以我试图放大它们,但矩形一个接一个。

给定以下代码:

输出:

在此处输入图像描述

绿色矩形是roomsred并且blueconnectors。正如你所看到的,矩形太小了,我需要一个像“60”这样的大小。但是,我似乎找不到 and 的正确值组合fillRectanglex,x1,y,y1其中矩形不会彼此重叠。

有人可以解释我如何解决这个问题吗?

0 投票
1 回答
1944 浏览

c - 优化我的递归迷宫求解器的方法?

我开发了以下 C 程序来找到迷宫中所有可能的路径。它必须穿过迷宫中的每个房间。这就是为什么“54”在此刻被硬编码的原因,因为对于我传入的 8*7 阵列,有 54 个开放的房间。我会解决这个问题并在我重写时动态传递它。但是,我正在寻找一些帮助来提高代码效率 - 它找到了超过 300,000 条可能的路径来完成我正在经过的迷宫,但它运行了将近一个小时。

0 投票
1 回答
449 浏览

java - 使用 HashMap 的 Set 迭代器不会产生值/键?

给定以下代码:

类坐标

封装模型;

还有一个 Game 类的方法:

HashMap没有迭代器,所以我使用 Set 来获取哈希图的元素。当我想迭代 的值时,我的问题就开始了HashMap,但由于那是不可能的,所以我尝试了Set,但Set返回的是 anObject而不是Coordinate对象本身。有没有办法得到它?

问候,罗恩

0 投票
1 回答
328 浏览

java - 如果我更改当前窗口尺寸(Java),Gui 生成器会重新生成我的迷宫

给定以下代码:

听众:

以及绘制迷宫的方法

我的问题是迷宫的窗口创建后,如果我用鼠标改变窗口的尺寸,那么该方法drawMaze会在当前窗口中创建一个新的迷宫。这显然是一个错误,那么我的错误在哪里?也许与Constructor班级有关Game

问候罗恩

0 投票
7 回答
6078 浏览

java - 使用栈遍历解迷宫——Java

所以我正在尝试创建一个迷宫求解程序来解决 X 和 O 的迷宫。我想做的是创建一个点类,这样我就可以创建一个二维点数组,这将允许打印到输出页面以及实现堆栈相对简单。

我想在实际程序本身中实现的一般思想的最简单算法我认为应该是:

但是我无法提出更深入的算法,也无法确定我的 Points 课程。我知道对于点我应该设置 X 坐标,并设置 Y 坐标以及两者的吸气剂。你认为我需要比这两个更多的方法吗?就像,我是否应该创建一个传递 x 坐标和 y 坐标作为参数的方法,这样我就可以将它们作为一个整体推在一起,而不是单独设置 x 和 y?

这是一个示例迷宫的样子,您从右下角开始并尝试遍历左上角,其中 X 为墙壁,O 为迷宫中的开放空间:

0 投票
2 回答
2612 浏览

java - 使用非递归回溯算法生成迷宫的问题

我正在开发一款适用于 Android 的游戏,其中将随机生成可探索区域。现在我只是想生成迷宫(有一些 ASCII 艺术输出,所以我可以看到它),我已经做了大约 4-5 天,但我只是难住了。

我正在尝试使用“深度优先搜索”算法,并且我能找到的所有示例都使用递归回溯。由于这适用于 Android 并且手机相对较弱,因此递归很快会导致调用堆栈溢出,这就是为什么我尝试使用堆栈来编写自己的算法进行回溯。

我想出了这个解决方案,使用 MazeGenerator 类和 MazeCell 类。

迷宫生成器:

迷宫单元:

这会产生如下所示的结果

请注意每个单元如何始终连接到其上下邻居。我无法弄清楚这里出了什么问题。

虽然 MazeCell 的 setNeighbor 函数中的检查看起来应该足够了,但我添加了一些只是为了看看会发生什么。这是第二个 generateMaze() 方法:

它会产生这样的结果

注意段是如何被分解的。

除了这里提到的之外,我已经玩过它很多,但没有任何东西显示出任何真正的改进——大多数最终看起来就像第二张照片。有什么帮助吗?

0 投票
5 回答
70763 浏览

java - 在 Java 中创建迷宫求解算法

我被分配了用 Java 创建迷宫求解器的任务。这是作业:

字符“X”代表墙壁或阻挡位置,字符“O”代表开放位置。你可以假设迷宫的入口总是在右下角,出口总是在左上角。您的程序应将其输出发送到文件。如果找到路径,则输出文件应包含该路径。如果找不到路径,则应向文件发送一条消息。请注意,迷宫可能有多个解法路径,但在本练习中,您只需要找到一种解法,而不是所有解法。

您的程序应该使用堆栈来记录它正在探索的路径,并在到达阻塞位置时回溯。

确保在编写代码之前编写完整的算法。随意创建任何其他课程,以帮助您完成作业。

无论如何,我设置的是一个 Points 类,它具有用于在所有基本方向上行驶的 set/get 方法,这些方法将返回布尔值,如下所示:

}

我只是在主要解决实际问题时遇到问题。这是我所拥有的:

除了任何语法错误,你们能给我一些帮助吗?非常感谢。

0 投票
1 回答
1697 浏览

javascript - Javascript - Randomized Prim's algorithm问题​​Randomized Prim's algorithm

我正在尝试在 javascript 中创建一个随机迷宫生成器。

那里可能已经有工作示例,但我正在尝试自己解决这个问题(嗯,尽可能多)

我遇到的问题是我的脚本只运行了几个块然后停止。

我认为问题在于我对我所遵循的解释的理解(来自这个维基百科页面http://en.wikipedia.org/wiki/Maze_generation_algorithm

该算法是 Prim 算法的随机版本。

  1. 从一个充满墙壁的网格开始。

  2. 选择一个单元格,将其标记为迷宫的一部分。将单元格的墙壁添加到墙壁列表中。

  3. 虽然列表中有墙:

    1. 从列表中随机选择一面墙。如果对面的牢房还没有进入迷宫:

      1. 使墙壁成为通道,并将另一侧的单元格标记为迷宫的一部分。

      2. 将单元格的相邻墙添加到墙列表中。

    2. 如果对面的牢房已经在迷宫中,则将墙从列表中删除。

正如我所强调的那样,我的问题是与此相反的 部分。这是否意味着我们墙列表中的任何相邻单元格?还是有别的意思?

我已经用相邻的单元格尝试过它,它最终只是把自己挡住了。

任何想法,将不胜感激。

如果我能让它工作,我会在完成后发布代码。正如我所说,在获得完整解决方案的帮助之前,我想自己走得更远。

0 投票
2 回答
91 浏览

java - Java 正则表达式帮助

该检查仍然失败。我把条件分开了,这样我就可以测试它们了。对于 cs = "WWWW", "WXW", "WWWWWWWWRWWWWWW" 它失败了