Algorithm 在网格上填充瓷砖,以便可以访问所有未填充的瓷砖
有人能告诉我一个解决以下问题的算法吗 假设我有一个10*10的瓷砖网格。每个瓷砖可以是“满”(玩家不能在上面行走)或“空”(玩家可以在上面行走)。我想浏览并随机填充瓷砖(以创建更有趣的地图),但是我需要所有“空”瓷砖才能访问。下面是一个快速图形: 我们从这一点开始:Algorithm 在网格上填充瓷砖,以便可以访问所有未填充的瓷砖,algorithm,Algorithm,有人能告诉我一个解决以下问题的算法吗 假设我有一个10*10的瓷砖网格。每个瓷砖可以是“满”(玩家不能在上面行走)或“空”(玩家可以在上面行走)。我想浏览并随机填充瓷砖(以创建更有趣的地图),但是我需要所有“空”瓷砖才能访问。下面是一个快速图形: 我们从这一点开始: _ _ _ _ _ _ _ _ _ _ |_|_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_|_| |_|_|_|
_ _ _ _ _ _ _ _ _ _
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
然后检查并填充一些瓷砖:
_ _ _ _ _ _ _ _ _ _
|#|_|_|#|_|#|_|_|_|_|
|_|_|#|_|_|_|_|_|#|_|
|_|_|#|_|_|#|#|_|#|_|
|_|_|_|_|#|#|#|_|_|#|
|_|#|_|_|_|_|_|_|_|_|
|_|_|_|#|_|#|_|#|_|_|
|#|#|_|_|_|_|#|_|_|#|
|_|_|_|_|#|_|#|_|_|_|
|_|_|#|_|_|_|_|#|_|_|
并删除所有额外的行(仅用于显示):
正如您所看到的,我们现在只剩下一个更有趣的地图,并且可以随机生成(根据我们决定何时“填充”平铺的方式)。然而,使用简单的随机性可能导致如下情况:
_ _ _ _ _ _ _ _ _ _
|# # # #|
| # # # |
| # # # |
| # # #|
| # |
| # # # # |
|# # # #|
| # # # # |
|_ _ # _ _ _ _ # _ _|
在这里,有大量的空间与地图的其余部分隔开。如果玩家从这些“房间”外开始,就不可能进入。如果他们在其中一个“房间”内出发,他们就出不去。我知道我可以使用洪水填充或类似的方法来测试这一点,但这意味着我必须生成新的地图,直到其中一个随机符合这些标准。我在想的是一套新的“填充”瓷砖的规则。现在我只是在每一块瓷砖中穿行,检查一个随机数是否高于阈值。如果是,请填写,如果不是,请转到下一个磁贴。但是,这意味着网格中的每个磁贴都与其他磁贴完全无关。我一直在考虑很多可以帮助我的规则集,尽管我可以把我的头脑集中在大多数规则集上。如果有人有任何建议,请告诉我预防方法 在这种方法中,不允许形成封闭空间 其中一种方法可能是使用 一个结果是封闭空间,如果
- 不接触边界:形成一个循环
- 带触摸边框:两个不相邻(水平或垂直)的全瓷砖,通过全瓷砖的某个路径连接,也与边框连接
如果我再想办法,我会告诉你的。希望上述方法能有所帮助。预防方法 在这种方法中,不允许形成封闭空间 其中一种方法可能是使用 一个结果是封闭空间,如果
- 不接触边界:形成一个循环
- 带触摸边框:两个不相邻(水平或垂直)的全瓷砖,通过全瓷砖的某个路径连接,也与边框连接
如果我再想办法,我会告诉你的。希望以上内容有所帮助。您可以遵循以下方法: 我们可以用你的分片创建一个图,分片是图的节点,如果两个分片都是填充的且相邻的,则定义边(如果你的玩家可以对角移动,则对角是可选的)。 若要支撑边,请将栅格设为12*12并填充所有边。 在此图中,当且仅当图中存在
循环时,才会隔离平铺
因此,您可以随机填充一个Tile值,并检查新图形是否仍然是树
接受它,否则重新填充并转到下一个尾部。
可以使用DFS
检查图形是否为树,您可以遵循以下方法:
我们可以用你的分片创建一个图,分片是图的节点,如果两个分片都是填充的且相邻的,则定义边(如果你的玩家可以对角移动,则对角是可选的)。
若要支撑边,请将栅格设为12*12并填充所有边。
在此图中,当且仅当图中存在循环时,才会隔离平铺
因此,您可以随机填充一个Tile值,并检查新图形是否仍然是树
接受它,否则重新填充并转到下一个尾部。
在上一个示例中,可以使用DFS
洪水填充每个房间来检查图形是否为树型,这将提供一个可以访问所有空瓷砖的地图。为什么你认为你必须生成一个全新的随机地图,而你可以通过洪水填充适当的区域来拯救你当前的地图?发布的解决方案解决了你的问题吗?如果是。如果没有,发布的解决方案没有回答什么?我离开了一段时间,很抱歉,但是是的,我确实使用了其中一个答案的一个稍微修改的版本。在上一次考试中,每个房间都充满了洪水
_ _ _ _ _ _ _ _ _ _
|# # # #|
| # # # |
| # # # |
| # # #|
| # |
| # # # # |
|# # # #|
| # # # # |
|_ _ # _ _ _ _ # _ _|