繁体   English   中英

如何找到距给定节点小于n的节点?

[英]How to find nodes at distance less than n from the given node?

从理论上讲,我可以使用Dijkstra的算法来查找所有节点的距离,但是如果我有一个大图,我将浪费大量时间来计算到远程节点的距离。 还有更有效的算法吗?

如果未对边缘进行加权(或者等效地,如果它们都具有相同的权重),则可以仅进行宽度优先搜索,直到所需的深度为止。 如果对它们进行加权,Dijkstra的算法是您的最佳选择:它还会按照与起始顶点的距离增加的顺序探索节点,因此,一旦找到的下一个顶点距离您的最大允许距离更远,就停止它。

您可以对此进行修改的广度优先搜索(即使是加权图)。

listNodes(node start , int maxRange)
    list queue
    set visited
    add(queue , start)
    add(visited , start)

    while ! isEmpty(queue)
        pair p = remove(queue , 0)

        int distTmp = p.dist
        node n = p.node

        //only neighbours that haven't yet been visited
        for node next in disjoint(listNeighbours(n) , visited)
            add(visited , next)//mark as visited
            //store the node in the queue with the distance to start as attribute
            add(queue , pair(next , distTmp + distance(n , next)))

    return visited

如果未对图形进行加权,则distance(node , node)对于邻居distance(node , node)将始终返回1。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM