Algorithm 连接网格上的区域

Algorithm 连接网格上的区域,algorithm,grid,pseudocode,flood-fill,Algorithm,Grid,Pseudocode,Flood Fill,我有一个瓷砖网格。这是一个布尔值的二维数组。”“假”表示一个空正方形,“真”表示一堵墙。我需要通过移除墙壁来连接所有的空白区域。到目前为止,我所有的想法都相当低效 唯一的保证是所有的空区域都由一层厚的层隔开。我更希望没有回路(连接两个区域后,不再移除将重新连接这两个区域的墙) 示例网格(#表示墙,.表示空白): 任何有助于这一点的算法或伪代码都是值得赞赏的例如,我认为您正在寻找最小生成树算法(假设您需要移除最少数量的墙) 任何空区域都将是图中的顶点,其中可以通过移除一块墙连接的区域将在它们之间有

我有一个瓷砖网格。这是一个布尔值的二维数组。”“假”表示一个空正方形,“真”表示一堵墙。我需要通过移除墙壁来连接所有的空白区域。到目前为止,我所有的想法都相当低效

唯一的保证是所有的空区域都由一层厚的层隔开。我更希望没有回路(连接两个区域后,不再移除将重新连接这两个区域的墙)

示例网格(#表示墙,.表示空白):


任何有助于这一点的算法或伪代码都是值得赞赏的

例如,我认为您正在寻找最小生成树算法(假设您需要移除最少数量的墙)


任何空区域都将是图中的顶点,其中可以通过移除一块墙连接的区域将在它们之间有一条边(仅在权重为1的情况下)。

根据您的逻辑,您只需找到任何生成树,这可以使用简单的DFS来完成。但是,通过仅移除一面墙,您可能可以连接两个以上的区域(最多4个),因此您的构造无法工作。谢谢。我知道我要找的东西一定有一个算法我只是不知道名字。所以我假设我将洪水淹没这些区域,然后随机移除一堵连接这两个区域的墙来构建生成树?是的,基本上是这样。但它不会像我在评论的第二句中建议的那样为您提供最佳解决方案,请参见例如“#.#\n.#.#.#.#”。答案是1,但每个生成树都有3条边
############
#....#.....#
#..##....###
#..#...##..#
######.#...#
#...#..#...#
#....####..#
#.....#....#
############