c++ - 从节点和关系生成 block 的算法

标签 c++ algorithm graph procedural-programming

我有节点列表和它们之间的线,它看起来像这样:

map

我需要的是生成 block ,在这种情况下它会是这样的: 区 block 1:1,2,14,11 block 2:2,13,12,14 区 block 3:2,3,4,5,6,12,13 区 block 4:6,7,12 等等……

有人知道如何为此创建算法吗?谢谢

最佳答案

您可以先将每个节点的边按顺时针顺序排序。 (例如,基于键 atan2(dy,dx) 排序,其中 dx,dy 是沿边的 vector 。)

然后以每条边(以及沿边的两个方向)为起点,沿着 block 的逆时针方向跟随边。

要逆时针方向,您会在目标节点的排序列表中找到传入边,并沿着列表中的下一条边退出。

例如,如果您从边 11->14 开始,那么当您到达节点 14 时,您就会知道接下来要走边 14->2(因为节点 14 的边将按顺时针顺序排列 14 ->12、14->11、14->2)。当您到达起始节点时,您已识别出一个区 block 。

您可以在跟随边缘时将边缘标记为已使用,以避免两次生成相同的 block 。 (如果起始边已被标记为在该方向使用,则跳过起始边。)

这也会生成一个由背景区域组成的 block 0。

关于c++ - 从节点和关系生成 block 的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15057251/

相关文章:

c++ - 构建项目的 Eclipse CDT 问题

javascript - JavaScript中数组的螺旋遍历

algorithm - 创建非自相交多边形的算法的有效性

r - GGplot - 基于其他列的同一列值的多行 - 无方面

python - 将文件元素读入邻接表

rasterbar libtorrent API 的 C++ 编译器问题

c++ - 当我使用在 C++ 中也返回 lambda 的 lambda 时输出不同?

c++ - 使用 Unicode 的 CString 格式返回错误的字符

algorithm - map API : Finding the longest common path in two given paths

algorithm - 各种图形类型的意义