【发布时间】:2014-05-16 13:18:32
【问题描述】:
我有一个表示为循环链表数组的平面图。 每个列表代表一个顶点及其相邻顶点。
我需要按顺时针平面顺序对每个邻接列表中的顶点进行排序。
我不知道该怎么做。有算法吗?
【问题讨论】:
-
每个顶点都有平面坐标吗?如果是这样,您可以使用
atan2(dir.y, dir.x),根据指向“中心”顶点的方向向量对相邻顶点进行排序。 -
是的,如果需要,我可以找到它们。如果找不到更好的解决方案,我会这样做。在最坏的情况下,它需要 O(V^2*log(V)) 时间。不是真正可以接受的复杂性。
-
你是怎么得出这么大的哦? IIRC,平面图中的边数为 O(V),因此该解决方案将在 O(V*log(V)) 时间内运行。
-
我需要对每个顶点的相邻顶点进行排序 - 所以整体复杂度是 VO(Vlog(V)) = O(V^2*log(V))
-
应该可以在没有坐标的情况下完成任务。使用坐标可能无法给出正确答案,在我的图中,很多顶点具有相同的 X 或 Y 坐标,因此与中心顶点的角度相同。
标签: c++ sorting graph adjacency-list