C++ 从节点和关系生成块的算法

C++ 从节点和关系生成块的算法,c++,algorithm,graph,procedural-programming,C++,Algorithm,Graph,Procedural Programming,我有一个节点列表和它们之间的线,看起来像这样: 我需要的是生成块,在这种情况下如下所示: 区块1:1,2,14,11 区块2:2,13,12,14 区块3:2,3,4,5,6,12,13 区块4:6,7,12 等等 有人知道如何为这个创建算法吗?thx您可以先将每个节点的边按顺时针顺序排序。(例如,根据atan2键(dy,dx)进行排序,其中dx,dy是沿边的向量。) 然后以每条边(以及沿边的两个方向)为起点,沿块的逆时针方向沿边移动 要按逆时针方向操作,请在目标节点的已排序列表中找到传入边,

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

我需要的是生成块,在这种情况下如下所示: 区块1:1,2,14,11 区块2:2,13,12,14 区块3:2,3,4,5,6,12,13 区块4:6,7,12 等等


有人知道如何为这个创建算法吗?thx

您可以先将每个节点的边按顺时针顺序排序。(例如,根据atan2键(dy,dx)进行排序,其中dx,dy是沿边的向量。)

然后以每条边(以及沿边的两个方向)为起点,沿块的逆时针方向沿边移动

要按逆时针方向操作,请在目标节点的已排序列表中找到传入边,然后沿列表中的下一条边退出

例如,如果您从边11->14开始,那么当您到达节点14时,您将知道下一步使用边14->2(因为节点14的边将按顺时针顺序14->12,14->11,14->2)。当您到达起始节点时,您已识别出一个块

可以将边标记为跟随它们时使用的边,以避免两次生成同一块。(如果起始边已标记为在该方向上使用,则跳过起始边。)


这还将生成一个由背景区域组成的块0。

在我看来,您正在尝试生成平面图的对偶


也许是个好的开始

如果你能展示一个代码示例或者你打算如何设置它,那么这可能会为你提供一个很好的起点。我只需要这个想法,你可以用你喜欢的任何语言来描述它。我也在想同样的事情,但我无法用多个块来解决这个问题。但是当你在写的时候,每一条边都是一个方向上一个块的一部分,另一个方向上一个块的一部分。非常感谢!