通过地图/矩阵以河流为分隔的集群地形图
Cluster terrain map disjoint by river through map/matrix?
我有一个简单的矩阵(矩阵,在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,因此最终您将得到两个连接的组件。
相关文章:
- 如何将 txt 文件中的行分隔为组件C++
- 无法通过空白将文本文件行分隔为矢量
- 如何在C++中读取空格分隔的输入 当我们不知道输入的数量时
- 如何将以逗号和空格分隔的整数读取到 2D 数组中?
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 如何逐行读取文件,每行中的内容都用空格分隔并将其写入新文件中
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- 如何在 C++ 中将文件中的逗号分隔数字读取到数组中?
- "Warning: Comma within array index expression"但逗号分隔函数参数
- C++逗号分隔的输入数组代码过早退出
- 如何分隔字符串并将标记传递给方法
- 分隔整数 (C++) 的数字
- 野牛/yacc 解析器在不被空格分隔时跳过 grammer - "unexpected $end"
- 读取制表符分隔的文件时出现问题 C++
- 通过分隔符分隔包含 UTF-16 BE 文本的uint8_t数组
- 如何更新和删除文本文件中的特定逗号分隔值?C++
- 如何将逗号分隔的文件读取为 2D int 数组?
- 通过地图/矩阵以河流为分隔的集群地形图