【问题标题】:algorithm for block generation from nodes and relationships从节点和关系生成块的算法
【发布时间】:2013-02-24 22:10:18
【问题描述】:

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

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

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

【问题讨论】:

  • 如果您可以展示代码示例或您打算如何设置它,那么这可能会为您提供帮助。
  • 我只需要这个想法,你可以用任何你喜欢的语言来描述它

标签: c++ algorithm graph procedural-programming


【解决方案1】:

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

然后以每条边(以及沿边的两个方向)为起点,围绕块逆时针沿着边走。

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

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

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

这也会生成一个包含背景区域的块 0。

【讨论】:

  • 我也在考虑同样的事情,但我无法解决多个块的问题。但是当你在写的时候,每条边都是一个方向的一个块的一部分,另一个方向的一个块。非常感谢!
【解决方案2】:

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

http://en.wikipedia.org/wiki/Dual_graph

可能是一个不错的起点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多