特定节点和点之间的最短距离

时间:2014-11-14 17:22:36

标签: c++

有没有更快的方法来找到特定节点(x,y)和一个点(多个点之间)之间的最短距离?或者使用蛮力是唯一的方法吗?在这种情况下,我处理成千上万的点数。我正在使用名为CodeBlocks的软件完成此任务。目前使用此。

inline double dist(Point p1, Point p2)
{
    return sqrt( (p1.x - p2.x)*(p1.x - p2.x) +
                 (p1.y - p2.y)*(p1.y - p2.y) );
}

double bruteForce(Point P[], int n, Point &p1)
{
    double min = DBL_MAX;
    for (int i = 0; i < n; ++i)
        if (dist(p1, P[i]) < min) {
                min = dist(p1, P[j]);
        }
    return min;
}

3 个答案:

答案 0 :(得分:1)

通常的快速方法使用四叉树或八叉树(分别用于2D和3D点)或R树。

答案 1 :(得分:0)

你可以设置它,这样每个点都有它自己的距离变量(就像一个类的对象)。然后检查该特定变量以查看哪一个最接近。

答案 2 :(得分:0)

空间分区在O(log N)中解决此问题,其中N是点空间的大小。 http://en.wikipedia.org/wiki/Nearest_neighbor_search#Methods