边缘类型例外的平面测试

时间:2017-04-03 14:29:39

标签: algorithm graph graph-algorithm planar-graph

我试图了解是否可以增强平面性检查算法(例如LR平面性,PC树,PQ树等等),以允许某些边缘根据其类型进行交叉。

我有一个边缘有3种不同类型的图形:A,B,C

A类边缘不能越过任何其他边缘。

B类边可以跨越C类边,反之亦然。

我已经看过一个简单的LR平面度测试,但无法成功实现此功能。

是否可以采用现有算法并使用这些规则进行调整,或者是否已有支持此算法的算法?

2 个答案:

答案 0 :(得分:1)

取仅包含A型边缘的子图,并使用标准平面度测试算法来查看它是否是平面的。

注意:一张图可能会generate multiple planar embeddings [第60页],因此您可能需要对此进行说明。

对于A型边缘进行平面嵌入后,您可以生成面部列表。

如果路径的端点,由A型边生成的平面子图中的两个顶点连接的B型边的路径只能以平面方式绘制(不跨越任何类型A边)两者都在嵌入的单个面的边界上。将这个添加到嵌入中,通过Jordan曲线定理,将执行嵌入的面平分,并生成两个子面。

注意:同样,路径可能会将多个面分成两部分,因此您可能有多个潜在的嵌入。

继续执行B型边/路径的嵌入,将两端连接到A型子图,并在每个步骤中平分一个面,直到您到达没有可行面的平分点(和图形)是非平面的)或A型和B型边是平面的。

由于C型边可以与B型交叉(反之亦然),您可以将C型边(使用相同的面对分方法)嵌入到A型子图中,而不考虑B型边(因为它们可以被越过)。

虽然这可以在O(N)中用于类型A和B或C(因为它实际上只是普通的平面嵌入),但您可能必须测试多个嵌入以找到适用于的面的方向A,B& C在一起,结果算法几乎肯定不是O(N)。

或者,如果您在生成不同的嵌入时知道面的排列约束,那么添加某种基于约束的求解器来协调嵌入中路径的方向可能会有所帮助。

答案 1 :(得分:0)

使用带有类型B和C的边的子图而不应用平面度测试,然后尝试通过应用平面度测试算法将类型A的边添加到子图中。