用于创建非相交边的算法

时间:2017-03-25 23:35:38

标签: algorithm

我有这个任务:给定n个顶点,每个顶点连接到下一个和前一个顶点,形成如下的铁路:1--2--3--4 ...

给出一组i - >形式的边缘。 j,并且边缘可以在铁路的北部或南部,问题是你是否可以建造给定的边缘(铁路的北部或南部),以便没有两条边相交?

我的想法是回溯检查每个给定的对首先向北,然后向南与一个矩阵A结合,如果从i到j(A [i] [j])的边缘构建为北或向南,并确定我是否可以建造下一个,以便它不与宝贵的相交,但它太慢了。是否有现有的算法可以满足我的要求,或者你可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

首先,我们可以假设所有路线i-> j都是从较低到较高的数字而不失一般性 - 否则我们可以简单地将任何路线从较高数字反转到较低数字。

现在,考虑其中顶点是铁路中的路线i-> j的图形,并且如果i <= i'和 j和i' - > j'之间存在边缘。 j'&lt; = j或i'&lt; = i&lt; j&lt; = j'(即,如果它们在火车轨道的同一侧,如果它们将交叉,则路线i-> j和i' - > j'在它们之间具有它们之间的边缘。

当且仅当该图是二分的时,才能构建铁路。为了有效地测试,可以使用例如此处描述的算法:How to find if a graph is bipartite?