群集地形图通过地图/矩阵与河流分离?

时间:2013-03-20 14:31:04

标签: c++ algorithm game-engine game-physics

我有简单的矩阵(矩阵,代表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

这里我应该得到左边的簇和右边的坐标簇,而不是河流。

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

你的地图会产生一个图表:

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

构建图形后,您可以运行图形遍历算法,如breadth-first search(BFS)或depth-first search(DFS),以查找图形的connected components

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

您只想在非 - ' r'上运行BFS。节点,这样最终你将得到两个连接的组件。