通过地图/矩阵以河流为分隔的集群地形图

Cluster terrain map disjoint by river through map/matrix?

本文关键字:分隔 地形图 河流 地图      更新时间:2023-10-16

我有一个简单的矩阵(矩阵,在2d游戏中代表地形地图,包含ASCII字符,例如'm'代表山,'v'代表山谷,'r'代表河流),在地图上可能有一个或没有河流。河流可以从任何位置从矩阵流向任何地方(并且总是在两个不同的部分上分开地图=>地图上不可能有河流的来源,总是从一端进入另一端存在)。如果有河流存在,如何在两个集群上分离矩阵/地形图?

示例地形

v v v v v v v v r v v v v v 
v v v v v m m m r m m m m m
v v v v v m m r r m m m m m
m m v m m m m r r m m m v v 
v v v v v v r r v v v v v v

这里我应该得到坐标的左簇和右簇它们不是river

您应该尝试查找填充算法。http://en.wikipedia.org/wiki/Flood_fill

基本上你想要选择一个不在河流中的点,启动洪水填充算法,它会给你一组连接到起点的点。这样,现在你有一个部分,从现在开始找到一个很容易。

你的地图绘制了一个图形:

  • 每个地图单元都有一个顶点
  • 如果两个顶点相邻它们都不是'r'

一旦构建了图,就可以运行像宽度优先搜索(BFS)或深度优先搜索(DFS)这样的图遍历算法来查找图的连接组件。

我建议使用BFS,因为如果映射很大,那么DFS可能会让你陷入堆栈溢出(如果使用递归实现)。

您将希望只在非'r'节点上运行BFS,因此最终您将得到两个连接的组件。