Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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
Algorithm 连接墙算法_Algorithm - Fatal编程技术网

Algorithm 连接墙算法

Algorithm 连接墙算法,algorithm,Algorithm,我必须找出一个算法,为“连接墙”游戏找到一个解决方案 在“连接墙”中,我们将矩形板分成相等的方形单元。在每个单元中,我们可以放置一个对角墙(从左上角指向右下角或从左下角指向右上角)。我们必须按照以下规则在所有的空白处设置墙壁: 每个单元格必须包含一堵墙 墙壁不得形成闭合环(我们不能“砌砖”) 连接到支柱的墙的数量必须与书写的数量匹配 在柱子上 此外,一些细胞可能含有我们无法移动的细胞壁 请帮忙 编辑: 嗯。我已经设法用C写了简化算法。我需要有人检查我。目前它的工作原理如下: 此外,我还有一个关

我必须找出一个算法,为“连接墙”游戏找到一个解决方案

在“连接墙”中,我们将矩形板分成相等的方形单元。在每个单元中,我们可以放置一个对角墙(从左上角指向右下角或从左下角指向右上角)。我们必须按照以下规则在所有的空白处设置墙壁:

  • 每个单元格必须包含一堵墙
  • 墙壁不得形成闭合环(我们不能“砌砖”)
  • 连接到支柱的墙的数量必须与书写的数量匹配 在柱子上
  • 此外,一些细胞可能含有我们无法移动的细胞壁
  • 请帮忙

    编辑:

    嗯。我已经设法用C写了简化算法。我需要有人检查我。目前它的工作原理如下:

    此外,我还有一个关于最后一个暴力步骤的问题。 我可以选择一个随机单元格作为开始吗?(也许有更快的方法) 我所理解的暴力算法:

  • 选择第一个单元格并标记它/或\
  • 检查是否符合支柱标准,是否没有循环
  • 如果一切正常,去空的邻居的手机,如果没有备份和 更改上一个单元格中的墙方向 (如果我们以前没有这样做)
  • 循环直到我们的板上没有空单元格。是这样吗
  • 还有一个关于快速循环检查的问题。 我发现我可以使用不相交集和图形特征的连接组件。 所以…我们在find-union结构中保持图的连通分量。
    如果新添加的边(墙)连接来自同一连接组件的点-这是一个循环。

    有趣的游戏。有点像扫雷车

    您是否只对获得解决方案的方法感兴趣?在这种情况下,它是一个简单的树搜索。有点像解迷宫。回溯之类的。易于修剪子树,因为限制非常严格

    快一点?寻找边界上的所有“2”支柱。先把它们都填好。同时填充拐角处的“1”柱。标记所有连接到“0”柱的墙为不可能,但标记所有其他方向(因为必须标记所有这些正方形)

    然后,对于具有墙的必要编号的每个支柱,将所有其他连接到该支柱的墙标记为不可能,并标记所有其他方向。然后用一堵墙标记与“3”根柱子相连的所有其他墙壁。标记所有其他与“2”柱相连的墙,其中有两个不可能的墙。然后是“1”支柱。循环


    在像这样简化电路板之后,您必须在其余未指定的墙上执行普通树搜索。标记一堵潜在的墙,然后再次在上面循环以消除可能性。

    类似于家庭作业。正如斯蒂芬·钟(Stephen Chung)所写,我曾试图首先解决支柱“0”、“2”和角落“1”的边境案件。然后是所有的“4”支柱。然后排除周围有“x”支柱和x个自由点的所有情况(占用的点未连接到当前支柱)。然后…我不知道我尝试了“人机”方法(即玩游戏),看起来简单地重复这些步骤就能找到答案。很少需要超过一个级别的搜索,所以最后是N个主教的问题?我将尝试实现它,看看它是如何工作的。谢谢你的提示。嗯,N-主教问题需要你通过一个搜索树。这一个看起来你可以单独用迭代来完成。甚至不需要在树上下一层。你的每一步行动都会消除一系列的可能性,同时也会要求你采取其他行动。那么“4”支柱呢?你忘了提了,我想我们也可以排除它们周围的细胞。@Maroou,是的。那也是。将其留作练习。:-)@马鲁,有件事我没提。不过,您必须检测循环。这可能需要递归。当我玩游戏的时候,有些位置有多种可能性,只是因为需要避免循环而被排除在外。