需要的算法:将港口放置在六边形地图中以确保洲际旅行

Algorithm wanted: placing harbours in a hex-tile map to ensure intercontinental travel

我正在制作一款使用六边形方块表示地图的游戏;瓦片或六角形,每个都包含指向列表形式的所有邻居的指针。该地图可能如下所示:

绿色的大区域是“大陆”,黄色的小区域是“岛屿”,其余都是一般的水体,请注意大陆内部可能有小块水。

大陆和岛屿永远是毗连的,从来不相接。玩家将在任何时候占据一个六角形。基本移动会将玩家从一个六角形移动到另一个,前提是起点和目的地相邻,并且该移动不会将玩家从陆地六角形移动到水上六角形。

“海港”是一个即将推出的功能,它位于大陆或岛屿的格子中,它们允许玩家从海港移动到任何相邻的水格,这应该可以在陆地之间移动

问题: 我想在这样的地图中至少放置2个港口,以确保玩家始终可以从大陆到岛屿,反之亦然。

由于以下并发症,这比看起来要难:

  1. 如果将港口放在内陆水体的岸边,港口将毫无用处
  2. 大陆可能将海分成多个部分,因此港口可能不会被放置在正确的海岸上有用(在下面的例子中;H1和H2不能完全通过水进行通信,而H2和H3可以)

因此,我欢迎任何关于在此类地图上放置港口的合适算法的清晰描述,我们将不胜感激任何伪代码

它是普通 BFS 或双向 BFS。

从接触水的格子开始 BFS - 橙色单元格。如果 BFS 在中间相遇,则在这些陆地区域放置一个港口。这将有助于避免像 harbour H1 这样的情况,因为像 H1 这样的像元的 BFS 不会遇到任何其他陆地区域。

注意:在您的 post 中,您不是在寻找要放置的最小港口。同样,BFS 在那里会有所帮助,但在实施中需要更多处理。请参阅下面的地图。红色的是地图上放置的最小港口。