algorithm – 边缘列表中的多边形

给定边缘地图< Point,List< Edge>>的地图中的N个点,可以在O(N log N)中获得由这些边形成的多边形?

我所知道的是,您必须遍历所有顶点并将包含该顶点的边作为起点.这些是voronoi图的边缘,每个顶点最多包含3个包含它的艺术家.因此,在地图中,键是顶点,值是顶点是起始节点的列表.

例如:

要点:a,b,c,d,e,f,g

边缘:[a,b]; [A,C]; [a,d],[b,c],[d,e],[e,g],[g,f]

我的想法是逆时针迭代地图,直到我得到初始顶点.那是一个多边形,然后我将它放在多边形列表中并继续寻找其他人.问题是我不想克服复杂性O(N log N)

谢谢!

最佳答案 您可以循环边缘并计算从边缘中点到所有站点的距离.然后按升序对距离进行排序,对于内部voronoi多边形,选择第一个和第二个.对于外多边形,选择第一个.基本上边缘分开/分割2个多边形.

这是O(m log n).

点赞