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

标签 algorithm actionscript-3 graph traversal pseudocode

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

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

图中的每个节点都有一个分配给它的二维点,代表它在平面上的位置。 我正在尝试编写一个遍历所有边并在两条边中的任何一条相交时返回 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
            }
        }
    }
}

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

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

最佳答案

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

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

关于algorithm - 遍历边缘和解决交叉点的优雅而有效的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34440899/

相关文章:

algorithm - 生成所有唯一的有向图,每个节点有 2 个输入

python - 有没有办法在 python 中简化这个 "n-way merge"

php - Mysql 在高流量数据库上使用过滤器计算行数

javascript - 如何找到所有选定节点的相邻节点和边缘? D3

actionscript-3 - 如何将四叉树单元格的空间索引(二进制索引)转换为位置和维度值?

javascript - 从javascript调用actionscript 3函数,addCallback不起作用

actionscript-3 - 从长方形变成梯形

python - python中的图形渲染(流程图可视化)

algorithm - 如何在 O(|E|) 中从图中删除一条边后更正 MST?

algorithm - 数量重新分配逻辑 - 具有外部数据集的 MapGroups