优雅而有效的遍历边缘和解决交叉点的方法

时间:2015-12-23 17:32:16

标签: algorithm actionscript-3 graph traversal pseudocode

我有一个数组代表这样的图的邻接矩阵。

connections:Array = [0,0,1,1,
                     0,0,1,1,
                     0,0,0,1,
                     0,0,0,0];

图表的每个节点都有一个分配给它的2D点,表示它在平面上的位置。 我试图编写一个遍历所有边的函数,如果两条边相交,则返回false。这是我的代码

function test():boolean
{
    for (i = 0; i < nodes.length ; i++)
    {
        for (j = i ; j < nodes.length ; j ++)
        {
            if (connections[i * nodes.length + j] == 1)
            {
                //we found an edge
                //This is the place where i am stuck I, can't figure out how
                //to take pairs of edges to test them for intersections
            }
        }
    }
}

您可以用任何语言甚至伪代码给出答案。

注意:我不需要任何交叉算法代码。

1 个答案:

答案 0 :(得分:0)

在遍历邻接矩阵时,构建以边缘为中心的数据结构。最简单的选项是边缘的简单列表。然后你可以迭代所有先前访问过的边,这将给你一个复杂的O(V ^ 2 + E ^ 2),其中V是顶点数,E是边数。

如果您有可能很大的图形,您可能希望使用更高效的数据结构,例如您即时构建的BSP树。这将使您的复杂性降低到O(V ^ 2 + E log E)。