Algorithm 查找二维地图中无法到达的部分

Algorithm 查找二维地图中无法到达的部分,algorithm,Algorithm,我不想让你帮我解决这个问题,我只是想问一些想法 这是下面的输入,它表示一个地图。“x”代表土地,点代表水。因此,使用“x”可以在地图上表示“岛屿” xxx.x...xxxxx xxxx....x...x ........x.x.x ..xxxxx.x...x ..x...x.xxx.x ..x.x.x...x.. ..x...x...xxx ...xxxxxx.... x

我不想让你帮我解决这个问题,我只是想问一些想法

这是下面的输入,它表示一个地图。“x”代表土地,点代表水。因此,使用“x”可以在地图上表示“岛屿”

xxx.x...xxxxx        
xxxx....x...x        
........x.x.x        
..xxxxx.x...x       
..x...x.xxx.x        
..x.x.x...x..        
..x...x...xxx        
...xxxxxx....        
x............ 
如您所见,有些岛屿已关闭,即,如果某艘船在其领土内,它将无法离开,例如:

..xxxxx.     
..x...x.        
..x.x.x.        
..x...x.
..xxxxx.
还有一些开放的岛屿可以从中摆脱出来,例如:

.xxxxx        
.x...x        
.x.x.x        
.xxx.x       
问题在于:对于上述给定的NxM地图,计算其中有多少岛屿是开放的,有多少岛屿是封闭的


我再说一遍:我不想让你解决它,只需要一些建议和解决问题的想法。谢谢

我认为使用好的旧洪水填充算法应该可以告诉您是否可以从某一点到达另一点


此外,您可能需要更好地定义“内部”和“外部”的含义(我认为)。

只需从所有点创建一个连接图(连接时标记它们),完成后-检查是否有任何图形节点位于周界内。然后转到下一个未标记的点


有一些常见的已知算法可用于创建连通图……

您可以将其读入矩阵,然后搜索。或者x,当你找到一个。或者,运行一个递归函数来搜索相邻的连接。完成后,搜索下一个。或者是还没有分析过的x,重复一遍。

我假设你说的“靠近”是指一个至少有一平方海的岛屿,从那里你无法到达地图的边界;你所说的开放是指任何其他岛屿

因此,首先,通过使用边界上任何海图的洪水填充,并标记您经过的海图,来发现哪些海图可以从地图的边界到达。如果边界上有任何海瓦,则继续从那里填充洪水

现在您已经标记了所有可以从边界到达的瓷砖,所有其他海瓷砖都被陆地包围。你可以为每个人找到包围它的岛屿(比如向北走直到发现陆地),并在陆地瓷砖上使用洪水填充,以标记属于岛屿的陆地瓷砖

通过这种方式,您可以计算包围海瓦的岛屿——“封闭”岛屿


每一块没有标记的地砖都属于一个“开放”的岛屿。再次使用泛洪填充来计算这些值。

以下是一些简单的标记规则:

  • 水不是开着就是关着
  • 边缘是开阔的水域
  • 开放水旁边的水是开放的

泛洪算法,或BFS

一点也不难,google graph算法在open中,你的意思是它们可以访问周界吗?这让我想起了扫雷舰游戏,在这里我们“打开”陆地/岛屿,一个简单的队列可以用于该任务。不过,你的情况似乎有点难。为此编写一个代码,你的答案不到50个字符。@M28,我的想法是一样的:D