查找2D地图的无法到达的部分

时间:2010-04-18 14:31:54

标签: 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............ 

正如你所看到的,有些岛屿是封闭的,即如果有一些船在其境内,它将无法离开,例如:

..xxxxx.     
..x...x.        
..x.x.x.        
..x...x.
..xxxxx.

还有一些开放的岛屿可以摆脱它们,例如:

.xxxxx        
.x...x        
.x.x.x        
.xxx.x       

问题在于:对于如上所述的给定NxM地图,计算任何岛屿的开放状态,以及关闭的数量。

我再说一遍:我不想让你解决它,只需要一些消化,解决的想法。感谢

6 个答案:

答案 0 :(得分:5)

我认为使用好的旧洪水填充算法应该告诉你是否从某个角度来说你可以达到另一个点。

http://en.wikipedia.org/wiki/Flood_fill

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

答案 1 :(得分:2)

我认为,近距离意味着一个至少包含一平方海的岛屿,人们无法到达地图的边界;并且打开你的意思是那里的任何其他岛屿。

因此,首先要发现哪些海图可以从地图的边界到达 - 通过使用边界上任何海瓦的填充填充并标记您传递的海图。如果边界上留有任何海瓦,请从那里继续填充。

现在您已经标记了可从边界到达的所有瓷砖,所有其他海运瓷砖都被陆地包围。您可以找到封闭它的岛屿中的每一个(通过向北探测土地),并在地块上使用洪水填充,以标记属于岛屿的地块。

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

您可以将其读入矩阵,然后搜索。或x,当你找到一个。或x,运行一个搜索相邻连接的递归函数。完成后,搜索下一个。或尚未分析的x并重复。

答案 4 :(得分:0)

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

  • 水是开放的还是关闭的
  • Edge是开阔水域
  • 开放水域附近的水是开放的

答案 5 :(得分:0)

泛洪算法,或BFS